Loading...
MySQL 9.5 Reference Manual 9.5의 11.1.4 Hexadecimal Literals의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Hexadecimal literal 값은 X'val' 또는 0xval 표기법을 사용하여 작성하며, val 에는 hexadecimal digit (0..9, A..F)이 포함됩니다. digit의 대소문자와 선행 X의 대소문자는 중요하지 않습니다. 선행 0x는 대소문자를 구분하며 0X로 작성할 수 없습니다.
유효한 hexadecimal literal:
1X'01AF' 2X'01af' 3x'01AF' 4x'01af' 50x01AF 60x01af
유효하지 않은 hexadecimal literal:
1X'0G' (G is not a hexadecimal digit) 20X01AF (0X must be written as 0x)
X'val' 표기법으로 작성된 값은 digit의 개수가 짝수가 아니면 구문 오류가 발생합니다. 문제를 수정하려면 값 앞에 0을 추가하여 채우십시오:
1mysql> SET @s = X'FFF'; 2ERROR 1064 (42000): You have an error in your SQL syntax; 3check the manual that corresponds to your MySQL server 4version for the right syntax to use near 'X'FFF'' 5 6mysql> SET @s = X'0FFF'; 7Query OK, 0 rows affected (0.00 sec)
0xval 표기법으로 작성된 값에 digit 개수가 홀수인 경우, 선행 0이 하나 더 있는 것으로 처리됩니다. 예를 들어, 0xaaa는 0x0aaa로 해석됩니다.
기본적으로 hexadecimal literal은 바이너리 문자열이며, 각 hexadecimal digit 쌍은 하나의 문자를 나타냅니다:
1mysql> SELECT X'4D7953514C', CHARSET(X'4D7953514C'); 2+---------------+------------------------+ 3| X'4D7953514C' | CHARSET(X'4D7953514C') | 4+---------------+------------------------+ 5| MySQL | binary | 6+---------------+------------------------+ 7mysql> SELECT 0x5461626c65, CHARSET(0x5461626c65); 8+--------------+-----------------------+ 9| 0x5461626c65 | CHARSET(0x5461626c65) | 10+--------------+-----------------------+ 11| Table | binary | 12+--------------+-----------------------+
Hexadecimal literal에는 선택적인 문자 집합 introducer와 COLLATE 절을 붙여서, 특정 문자 집합과 collation을 사용하는 문자열로 지정할 수 있습니다:
1[_charset_name] X'val' [COLLATE collation_name]
예시는 다음과 같습니다:
1SELECT _latin1 X'4D7953514C'; 2SELECT _utf8mb4 0x4D7953514C COLLATE utf8mb4_danish_ci;
이 예시에서는 X'val' 표기법을 사용하지만, 0xval 표기법에서도 introducer를 사용할 수 있습니다. introducer에 대한 자세한 내용은 Section 12.3.8, “Character Set Introducers”를 참조하십시오.
숫자 컨텍스트에서 MySQL은 hexadecimal literal을 BIGINT UNSIGNED (64비트 부호 없는 정수)처럼 취급합니다. Hexadecimal literal이 숫자로 처리되도록 하려면 숫자 컨텍스트에서 사용하십시오. 이렇게 하는 방법으로는 0을 더하거나 CAST(... AS UNSIGNED)를 사용하는 것이 포함됩니다. 예를 들어, 사용자 정의 변수에 할당된 hexadecimal literal은 기본적으로 바이너리 문자열입니다. 값을 숫자로 할당하려면 숫자 컨텍스트에서 사용합니다:
1mysql> SET @v1 = X'41'; 2mysql> SET @v2 = X'41'+0; 3mysql> SET @v3 = CAST(X'41' AS UNSIGNED); 4mysql> SELECT @v1, @v2, @v3; 5+------+------+------+ 6| @v1 | @v2 | @v3 | 7+------+------+------+ 8| A | 65 | 65 | 9+------+------+------+
빈 hexadecimal 값(X'')은 길이가 0인 바이너리 문자열로 평가됩니다. 이것을 숫자로 변환하면 0이 됩니다:
1mysql> SELECT CHARSET(X''), LENGTH(X''); 2+--------------+-------------+ 3| CHARSET(X'') | LENGTH(X'') | 4+--------------+-------------+ 5| binary | 0 | 6+--------------+-------------+ 7mysql> SELECT X''+0; 8+-------+ 9| X''+0 | 10+-------+ 11| 0 | 12+-------+
X'val' 표기법은 표준 SQL을 기반으로 합니다. 0x 표기법은 ODBC를 기반으로 하며, ODBC에서는 hexadecimal 문자열이 BLOB 열에 값을 제공하기 위해 자주 사용됩니다.
문자열 또는 숫자를 hexadecimal 형식의 문자열로 변환하려면 HEX() 함수를 사용하십시오:
1mysql> SELECT HEX('cat'); 2+------------+ 3| HEX('cat') | 4+------------+ 5| 636174 | 6+------------+ 7mysql> SELECT X'636174'; 8+-----------+ 9| X'636174' | 10+-----------+ 11| cat | 12+-----------+
Hexadecimal literal에 대해 비트 연산은 숫자 컨텍스트로 간주되지만, MySQL 9.5 이상에서는 비트 연산이 숫자 또는 바이너리 문자열 인자를 허용합니다. Hexadecimal literal에 대해 바이너리 문자열 컨텍스트를 명시적으로 지정하려면, 인자 중 적어도 하나에 _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를 사용한 결과는 바이너리 문자열입니다. 결과 타입의 차이로 인해 표시되는 값이 달라집니다. 숫자 결과에서는 최상위 0 digit이 표시되지 않습니다.
11.1.3 Date and Time Literals
11.1.5 Bit-Value Literals