Loading...
MySQL 9.5 Reference Manual 9.5의 11.1.5 Bit-Value Literals의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Bit-value literal은
b'val' 또는
0bval 표기법을 사용하여 작성합니다.
val 은 0과 1을 사용하여 쓰는 이진 값입니다. 선행 b
문자의 대소문자는 중요하지 않습니다. 선행 0b 는
대소문자를 구분하며 0B 로 쓸 수 없습니다.
유효한 bit-value literal:
1b'01' 2B'01' 30b01
유효하지 않은 bit-value literal:
1b'2' (2 is not a binary digit) 20B01 (0B must be written as 0b)
기본적으로 bit-value literal은 바이너리 문자열입니다:
1mysql> SELECT b'1000001', CHARSET(b'1000001'); 2+------------+---------------------+ 3| b'1000001' | CHARSET(b'1000001') | 4+------------+---------------------+ 5| A | binary | 6+------------+---------------------+ 7mysql> SELECT 0b1100001, CHARSET(0b1100001); 8+-----------+--------------------+ 9| 0b1100001 | CHARSET(0b1100001) | 10+-----------+--------------------+ 11| a | binary | 12+-----------+--------------------+
Bit-value literal은 선택적인 문자 집합
인트로듀서와 COLLATE 절을 가질 수 있으며, 이를 통해
특정 문자 집합과 콜레이션을 사용하는
문자열로 지정할 수 있습니다:
1[_charset_name] b'val' [COLLATE collation_name]
예:
1SELECT _latin1 b'1000001'; 2SELECT _utf8mb4 0b1000001 COLLATE utf8mb4_danish_ci;
이 예에서는
b'val' 표기법을 사용하지만,
0bval 표기법에서도
인트로듀서를 허용합니다. 인트로듀서에 대한 정보는
Section 12.3.8, “Character Set Introducers”를 참고하십시오.
숫자 컨텍스트에서 MySQL은 bit literal을 정수처럼 취급합니다.
Bit literal이 숫자로 처리되도록 보장하려면, 이를 숫자
컨텍스트에서 사용하십시오. 이렇게 하는 방법에는 0을 더하거나
CAST(... AS UNSIGNED)를 사용하는 것이 포함됩니다. 예를 들어,
사용자 정의 변수에 할당된 bit literal은 기본적으로 바이너리
문자열입니다. 값을 숫자로 할당하려면 이를 숫자
컨텍스트에서 사용하십시오:
1mysql> SET @v1 = b'1100001'; 2mysql> SET @v2 = b'1100001'+0; 3mysql> SET @v3 = CAST(b'1100001' AS UNSIGNED); 4mysql> SELECT @v1, @v2, @v3; 5+------+------+------+ 6| @v1 | @v2 | @v3 | 7+------+------+------+ 8| a | 97 | 97 | 9+------+------+------+
빈 bit 값(b'')은 길이 0의 바이너리 문자열로 평가됩니다.
이를 숫자로 변환하면 0을 생성합니다:
1mysql> SELECT CHARSET(b''), LENGTH(b''); 2+--------------+-------------+ 3| CHARSET(b'') | LENGTH(b'') | 4+--------------+-------------+ 5| binary | 0 | 6+--------------+-------------+ 7mysql> SELECT b''+0; 8+-------+ 9| b''+0 | 10+-------+ 11| 0 | 12+-------+
Bit-value 표기법은 값을
BIT 열에 할당할 값을 지정할 때
편리합니다:
1mysql> CREATE TABLE t (b BIT(8)); 2mysql> INSERT INTO t SET b = b'11111111'; 3mysql> INSERT INTO t SET b = b'1010'; 4mysql> INSERT INTO t SET b = b'0101';
결과 집합의 bit 값은 바이너리 값으로 반환되며,
표시가 잘 되지 않을 수 있습니다. Bit 값을 출력 가능한 형태로
변환하려면, 이를 숫자 컨텍스트에서 사용하거나
BIN() 또는
HEX()와 같은 변환 함수를 사용하십시오. 변환된 값에서는
상위 0 숫자가 표시되지 않습니다.
1mysql> SELECT b+0, BIN(b), OCT(b), HEX(b) FROM t; 2+------+----------+--------+--------+ 3| b+0 | BIN(b) | OCT(b) | HEX(b) | 4+------+----------+--------+--------+ 5| 255 | 11111111 | 377 | FF | 6| 10 | 1010 | 12 | A | 7| 5 | 101 | 5 | 5 | 8+------+----------+--------+--------+
Bit literal에 대해, 비트 연산은 숫자 컨텍스트로 간주되지만,
MySQL 9.5 이상에서는 비트 연산이 숫자 또는 바이너리
문자열 인자를 허용합니다. Bit literal에 대해 바이너리
문자열 컨텍스트를 명시적으로 지정하려면,
인자 중 최소 하나에 대해
_binary 인트로듀서를 사용하십시오:
1mysql> SET @v1 = b'000010101' | b'000101010'; 2mysql> SET @v2 = _binary b'000010101' | _binary b'000101010'; 3mysql> SELECT HEX(@v1), HEX(@v2); 4+----------+----------+ 5| HEX(@v1) | HEX(@v2) | 6+----------+----------+ 7| 3F | 003F | 8+----------+----------+
표시되는 결과는 두 비트 연산 모두 비슷해 보이지만,
_binary 가 없는 결과는
BIGINT 값인 반면,
_binary 가 있는 결과는 바이너리 문자열입니다. 결과 타입의
차이로 인해 표시되는 값이 달라집니다:
숫자 결과에서는 상위 0 숫자가 표시되지 않습니다.
11.1.4 Hexadecimal Literals
11.1.6 Boolean Literals