2009-09-17 2 views

답변

8
SET @test = 'test'; 
SELECT COERCIBILITY(@test), COERCIBILITY('test'); 

--- --- 
2 4 

:

COERCIBILITY(str)

반환 값은 다음 표에 나타낸 의미를 갖는다. 값이 낮을수록 우선 순위가 높습니다.

Coercibility Meaning Example 
0    Explicit collation Value with COLLATE clause 
1    No collation   Concatenation of strings with different collations 
2    Implicit collation Column value 
3    System constant  USER() return value 
4    Coercible    Literal string 
5    Ignorable    NULL or an expression derived from NULL 

Coercibility은 데이터 정렬 충돌의 경우에 어떤로 변환됩니다 정의합니다.

높은 coercibility의 표현은 낮은 coercibility와 표현의 데이터 정렬로 변환됩니다.

이 함수는 데이터 정렬 문제를 해결하는 데 유용합니다. 예를 들어,이 두 쿼리는 결과를 다른 순서로 반환합니다.

이 하나

SELECT col 
FROM (
     SELECT DATABASE() AS col 
     UNION ALL 
     SELECT 'X' 
     ) q 
ORDER BY 
     col; 

---- 
'test' 
'X' 

그리고이 하나 : 왜 그렇게

SET @t := 'X' COLLATE UTF8_BIN; 
SELECT col 
FROM (
     SELECT DATABASE() AS col 
     UNION ALL 
     SELECT @t 
     ) q 
ORDER BY 
     col; 

---- 
'X' 
'test' 

?

DATABASE()은 반환 값이 coercibility가 3이고 기본 데이터베이스 정렬이 UTF8_GENERAL_CI 인 시스템 함수입니다.

첫 번째 쿼리의 'X'는 coercibility가 4 인 문자열 리터럴입니다. @t가있다, 두 번째 쿼리에서

SELECT col, COERCIBILITY(col), COLLATION(col) 
FROM (
     SELECT DATABASE() AS col 
     UNION ALL 
     SELECT 'X' 
     ) q 
ORDER BY 
     col; 

-------- 
'test', 3, 'utf8_general_ci' 
'X',  3, 'utf8_general_ci' 

:

UNION의 결과는 항상 모든 값의 최소 coercibility (즉, 3입니다) 그리고 가장 coersibility와 표현의 정렬을해야합니다 조합으로 문자열 값을 보유하는 변수 UTF8_BIN. coercibility는 시스템 함수의 coercibility보다 낮기 때문에 결과 집합에 사용되는 변수의 데이터 정렬입니다. 변수의

Coercibility는 결과의 coercibility가 정렬뿐만 아니라, 변수의 것을 그래서, 2입니다 : MySQL의 변수 때문에, 대소 문자를 구분하지 않기 때문에

SET @t := 'X' COLLATE UTF8_BIN; 
SELECT col, COERCIBILITY(col), COLLATION(col) 
FROM (
     SELECT DATABASE() AS col 
     UNION ALL 
     SELECT @t 
     ) q 
ORDER BY 
     col; 

-------- 
'X',  2, 'utf8_bin' 
'test', 2, 'utf8_bin' 
+0

그냥 궁금 해서요,이 정보는 어떤 용도로 사용됩니까? – iceangel89

관련 문제