Loading...
MySQL 9.5 Reference Manual 9.5의 12.3.8 Character Set Introducers의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
character string literal, hexadecimal literal, 또는 bit-value literal에는 선택적인 character set introducer 및 COLLATE 절이 있을 수 있으며, 이를 통해 해당 literal이 특정 character set 및 collation을 사용하는 문자열임을 지정할 수 있습니다:
1[_charset_name] literal [COLLATE collation_name]
_charset_name 식은 형식적으로 _introducer_라 부릅니다. 이는 파서에게 “뒤따르는 문자열은 character set _charset_name_을 사용한다”라고 알려 줍니다. introducer는 CONVERT()가 수행하는 것처럼 문자열을 introducer character set으로 변경하지 않습니다. 문자열 값은 변경되지 않지만, 패딩이 발생할 수는 있습니다. introducer는 단지 신호일 뿐입니다.
character string literal의 경우, introducer와 문자열 사이의 공백은 허용되지만 선택 사항입니다.
character set literal의 경우, introducer는 뒤따르는 문자열의 character set을 나타내지만, 파서가 문자열 내에서 이스케이프 처리를 수행하는 방식은 변경하지 않습니다. 이스케이프는 항상 character_set_connection에 의해 지정된 character set에 따라 파서에 의해 해석됩니다. 추가 논의와 예시는 Section 12.3.6, “Character String Literal Character Set and Collation”을 참조하십시오.
예:
1SELECT 'abc'; 2SELECT _latin1'abc'; 3SELECT _binary'abc'; 4SELECT _utf8mb4'abc' COLLATE utf8mb4_danish_ci; 5 6SELECT _latin1 X'4D7953514C'; 7SELECT _utf8mb4 0x4D7953514C COLLATE utf8mb4_danish_ci; 8 9SELECT _latin1 b'1000001'; 10SELECT _utf8mb4 0b1000001 COLLATE utf8mb4_danish_ci;
character set introducer와 COLLATE 절은 표준 SQL 사양에 따라 구현됩니다.
character string literal은 _binary introducer를 사용하여 binary 문자열로 지정할 수 있습니다. hexadecimal literal과 bit-value literal은 기본적으로 binary 문자열이므로, _binary는 허용되지만 일반적으로는 불필요합니다. _binary는 literal이 숫자로 처리되는 문맥에서 hexadecimal 또는 bit literal을 binary 문자열로 유지하는 데 유용할 수 있습니다. 예를 들어, 비트 연산은 MySQL 9.5 이상에서 숫자 또는 binary 문자열 인수를 허용하지만, hexadecimal 및 bit literal을 기본적으로 숫자로 취급합니다. 이러한 literal에 대해 binary 문자열 문맥을 명시적으로 지정하려면, 인수 중 적어도 하나에 _binary introducer를 사용하십시오:
1mysql> SET @v1 = X'000D' | X'0BC0'; 2mysql> SET @v2 = _binary X'000D' | X'0BC0'; 3mysql> SELECT HEX(@v1), HEX(@v2); 4+----------+----------+ 5| HEX(@v1) | HEX(@v2) | 6+----------+----------+ 7| BCD | 0BCD | 8+----------+----------+
표시된 결과는 두 비트 연산 모두에 대해 비슷하게 보이지만, _binary 없이 얻은 결과는 BIGINT 값인 반면, _binary를 사용한 결과는 binary 문자열입니다. 결과 타입이 다르기 때문에 표시되는 값 또한 다릅니다. 숫자 결과에서는 상위 0 자릿수가 표시되지 않습니다.
MySQL은 character string literal, hexadecimal literal, 또는 bit-value literal의 character set과 collation을 다음과 같은 방식으로 결정합니다:
__charset_name_과 COLLATE collation_name이 모두 지정된 경우, character set은 _charset_name_이고 collation은 _collation_name_입니다. _collation_name_은 _charset_name_에 허용된 collation이어야 합니다.
__charset_name_이 지정되었지만 COLLATE가 지정되지 않은 경우, character set은 _charset_name_이고 그 기본 collation이 사용됩니다. 각 character set에 대한 기본 collation을 확인하려면 SHOW CHARACTER SET statement를 사용하거나 INFORMATION_SCHEMA의 CHARACTER_SETS 테이블을 조회하십시오.
__charset_name_은 지정되지 않았지만 COLLATE collation_name이 지정된 경우:
character string literal에 대해서는, character_set_connection 시스템 변수에 의해 주어지는 커넥션 기본 character set과 collation _collation_name_이 사용됩니다. _collation_name_은 커넥션 기본 character set에 허용된 collation이어야 합니다.
hexadecimal literal 또는 bit-value literal에 대해서는, 이러한 종류의 literal이 기본적으로 binary 문자열이므로 허용되는 collation은 binary뿐입니다.
그 밖의 경우 (__charset_name_과 COLLATE collation_name이 모두 지정되지 않은 경우):
character string literal에 대해서는, character_set_connection 및 collation_connection 시스템 변수에 의해 주어지는 커넥션 기본 character set 및 collation이 사용됩니다.
hexadecimal literal 또는 bit-value literal에 대해서는, character set과 collation이 binary입니다.
예:
latin1 character set과 latin1_german1_ci collation을 사용하는 nonbinary 문자열:1SELECT _latin1'Müller' COLLATE latin1_german1_ci; 2SELECT _latin1 X'0A0D' COLLATE latin1_german1_ci; 3SELECT _latin1 b'0110' COLLATE latin1_german1_ci;
utf8mb4 character set과 그 기본 collation(즉, utf8mb4_0900_ai_ci)을 사용하는 nonbinary 문자열:1SELECT _utf8mb4'Müller'; 2SELECT _utf8mb4 X'0A0D'; 3SELECT _utf8mb4 b'0110';
binary character set과 그 기본 collation(즉, binary)을 사용하는 binary 문자열:1SELECT _binary'Müller'; 2SELECT X'0A0D'; 3SELECT b'0110';
hexadecimal literal과 bit-value literal은 기본적으로 binary 문자열이기 때문에 introducer가 필요 없습니다.
utf8mb4_0900_ai_ci collation을 사용하는 nonbinary 문자열(커넥션 character set이 utf8mb4가 아닌 경우 실패):1SELECT 'Müller' COLLATE utf8mb4_0900_ai_ci;
이 구성(COLLATE만 사용하는 것)은 hexadecimal literal 또는 bit literal에는 동작하지 않습니다. 이들의 character set은 커넥션 character set과 관계없이 항상 binary이며, binary는 utf8mb4_0900_ai_ci collation과 호환되지 않기 때문입니다. introducer 없이 허용되는 유일한 COLLATE 절은 COLLATE binary입니다.
1SELECT 'Müller';
12.3.7 The National Character Set
12.3.9 Examples of Character Set and Collation Assignment