我用枚举类型将所有表格字段更新为tinyint(1),但我看到了一些奇怪的行为。
假设field_x类型为enum('0','1','2')
;
更改表格(ALTER TABLE a MODIFY field_x tinyint(1) NOT NULL DEFAULT 1
)后,原始值为0的字段现在为1,原始值为1的字段现在为2 ...
有人知道造成这种情况的原因吗?
答案 0 :(得分:3)
底层问题是如何在mysql中存储枚举
对于enum('0','1','2')
MySQL,将内部枚举值作为整数键存储。
所以上面的索引是
0 = 1
1 = 2
2 = 3
因此,当您将列更改为tinyint
时,保存的值将作为字符串转换为tinyint
的相应索引,并且您将获得
1 for 0, 2 for 1 ....