모든 사용자 변수는 무엇을 의미 하는가를 암시 coercibility 값강제력은 무엇을 의미합니까? MySQL의 사용자 변수
있나요? 그것과 관련이 있습니다 ...
여기서 @A는 2를 "참조"했기 때문에 어쩌면 할당 했습니까? documentation 가입일
모든 사용자 변수는 무엇을 의미 하는가를 암시 coercibility 값강제력은 무엇을 의미합니까? MySQL의 사용자 변수
있나요? 그것과 관련이 있습니다 ...
여기서 @A는 2를 "참조"했기 때문에 어쩌면 할당 했습니까? documentation 가입일
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'
그냥 궁금 해서요,이 정보는 어떤 용도로 사용됩니까? – iceangel89
당신이보고있는 동작입니다 @ a와 @A는 같은 변수입니다. – longneck