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)的内部引用。