MySQL은 ENUM 멤버를 참조하기 위해 ENUM 값을 정수 키(인덱스 번호)로 내부적으로 저장합니다. ENUM 컬럼에 정수 값을 저장하지 않는 주된 이유는 MySQL이 결국 값 대신 인덱스를 참조하게 되며 그 반대의 경우도 마찬가지이기 때문입니다.
예시
다음 예는 명확하게 할 수 있습니다 -
mysql> Create table enmtest(Val ENUM('0','1','2')); Query OK, 0 rows affected (0.18 sec) mysql> Insert into enmtest values('1'),(1); Query OK, 2 rows affected (0.19 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> Select * from enmtest; +-----+ | Val | +-----+ | 1 | | 0 | +-----+ 2 rows in set (0.00 sec)
여기에서 '1'을 문자열로 삽입했고 실수로 1을 숫자로 삽입했습니다(따옴표 제외). MySQL은 숫자 입력을 인덱스 값으로 혼란스럽게 사용합니다. 즉, 멤버 목록의 첫 번째 항목(즉, 0)에 대한 내부 참조입니다.