문자열 데이터 타입에 CHARACTER SET binary 속성을 지정하면, MySQL은 해당 컬럼을 대응되는 바이너리 문자열 타입으로 자동 변환하여 생성합니다. 주요 데이터 타입의 변환 규칙은 다음과 같습니다.
- CHAR → BINARY
- VARCHAR → VARBINARY
- TEXT → BLOB
반면, ENUM과 SET 데이터 타입에는 이러한 변환이 적용되지 않습니다. 이 두 타입은 테이블 생성 시 선언된 그대로 만들어집니다.
예제
아래 예제에서는 네 개의 컬럼을 모두 CHARACTER SET binary로 지정하여 'EMP'라는 이름의 테이블을 생성해 보겠습니다.
mysql> Create table Emp(Name varchar(10) CHARACTER SET binary, Address CHAR(10) CHARACTER SET binary, Designation TEXT CHARACTER SET binary, Field ENUM('ENG','SS') CHARACTER SET binary);
Query OK, 0 rows affected (0.16 sec)
테이블 생성 후, 다음 쿼리로 테이블의 실제 구조를 확인해 보면 MySQL이 각 컬럼의 데이터 타입을 대응되는 바이너리 문자열 타입으로 자동 변경했음을 알 수 있습니다.
mysql> Show Create Table EMP\G
*************************** 1. row ***************************
Table: EMP
Create Table: CREATE TABLE `emp` (
`Name` varbinary(10) DEFAULT NULL,
`Address` binary(10) DEFAULT NULL,
`Designation` blob,
`Field` enum('ENG','SS') CHARACTER SET binary DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
결과에서 확인할 수 있듯이 VARCHAR(10)은 varbinary(10)로, CHAR(10)은 binary(10)로, TEXT는 blob으로 각각 변환되었습니다. 반면 ENUM 타입인 Field 컬럼은 선언된 그대로 enum('ENG','SS') 형태로 유지되는 것을 볼 수 있습니다.
참고: 바이너리 문자열 타입의 특징
BINARY, VARBINARY, BLOB와 같은 바이너리 문자열 타입은 문자셋(character set)과 무관하게 바이트 값을 그대로 저장하고 비교합니다. 따라서 문자 인코딩 변환이 발생하지 않으므로, 이미지 파일이나 암호화된 데이터 같은 이진 데이터를 저장할 때 유용하게 활용할 수 있습니다.