MySQL lưu trữ giá trị ENUM nội bộ như các khóa số nguyên (số chỉ mục) để tham chiếu các thành viên ENUM. Lý do chính không nên lưu giá trị số nguyên trong cột ENUM là rất rõ ràng: MySQL sẽ tham chiếu đến chỉ mục thay vì giá trị và ngược lại.
Ví dụ
Ví dụ sau làm rõ vấn đề:
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)
Ở đây, chúng ta chèn '1' như chuỗi và vô tình cũng chèn 1 như số (không có dấu ngoặc). MySQL gây nhầm lẫn bằng cách sử dụng đầu vào số của chúng ta làm giá trị chỉ mục, tức là tham chiếu nội bộ đến mục đầu tiên trong danh sách thành viên (tức là '0').