Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL ENUM 열에 숫자를 저장하지 말아야 하는 이유는 무엇입니까?

<시간/>

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)에 대한 내부 참조입니다.