MySQL의 빈 16진수 값 처리 방식
MySQL에서는 빈(empty) 16진수 값을 길이가 0인 바이너리 문자열(binary string)로 평가합니다. 즉, 아무 문자도 포함하지 않은 16진수 리터럴이 입력되더라도 에러가 발생하는 것이 아니라, 캐릭터셋이 'binary'이고 길이가 0인 문자열로 인식됩니다.
실제 예제를 통해 이를 확인해 보겠습니다.
1. CHARSET() 함수로 데이터 타입 확인하기
빈 16진수 값에 CHARSET() 함수를 적용하면 결과는 다음과 같습니다.
mysql> Select CHARSET(X''); +--------------+ | CHARSET(X'') | +--------------+ | binary | +--------------+ 1 row in set (0.00 sec)
위 결과 집합을 보면, 빈 16진수 값의 캐릭터셋이 binary로 반환되는 것을 알 수 있습니다. 이는 해당 값이 일반 텍스트 문자열이 아니라 바이너리 문자열로 처리된다는 의미입니다.
2. LENGTH() 함수로 길이 확인하기
이번에는 LENGTH() 함수를 사용해 실제 길이를 확인해 보겠습니다.
mysql> Select LENGTH(X''); +-------------+ | LENGTH(X'') | +-------------+ | 0 | +-------------+ 1 row in set (0.00 sec)
결과에서 알 수 있듯이, 빈 16진수 값의 길이는 0입니다.
정리
MySQL은 빈 16진수 값을 다음과 같이 평가합니다.
- 캐릭터셋:
binary - 길이:
0
따라서 빈 16진수 값은 길이가 0인 바이너리 문자열(zero-length binary string)로 해석된다는 점을 기억하시기 바랍니다. 이러한 동작 방식은 BINARY 또는 VARBINARY 타입의 컬럼에 빈 값을 저장할 때 유용하게 활용될 수 있습니다.