MySQL内部将ENUM值存储为整数键(索引号),以引用ENUM成员。不将整数值存储在ENUM列中的主要原因是,很明显,MySQL最终引用了索引而不是值,反之亦然。
以下示例可以澄清它-
mysql> Create table enmtest(Val ENUM('0','1','2'));
mysql> Insert into enmtest values('1'),(1);
Records: 2 Duplicates: 0 Warnings: 0
mysql> Select * from enmtest;
+-----+
| Val |
+-----+
| 1 |
| 0 |
+-----+
2 rows in set (0.00 sec)在这里,我们将'1'作为字符串插入,并且偶然也将1作为数字插入(不带引号)。MySQL混淆地使用我们的数字输入作为索引值,即对成员列表中第一项(即0)的内部引用。