MySql - 将字段枚举类型更改为tinyint时的奇怪行为

时间:2014-07-22 21:00:57

标签: php mysql sql alter-table alter

我用枚举类型将所有表格字段更新为tinyint(1),但我看到了一些奇怪的行为。

假设field_x类型为enum('0','1','2');

更改表格(ALTER TABLE a MODIFY field_x tinyint(1) NOT NULL DEFAULT 1)后,原始值为0的字段现在为1,原始值为1的字段现在为2 ...

有人知道造成这种情况的原因吗?

1 个答案:

答案 0 :(得分:3)

底层问题是如何在mysql中存储枚举

对于enum('0','1','2') MySQL,将内部枚举值作为整数键存储。

所以上面的索引是

0 = 1
1 = 2
2 = 3

因此,当您将列更改为tinyint时,保存的值将作为字符串转换为tinyint的相应索引,并且您将获得

1 for 0, 2 for 1 ....