项目中有一个字段用了enum类型,差点完犊子了。
背景是这样的:测试环境的字段类型用了varchar,线上环境该字段类型为enum(这个就不应该不一致!!但不知道啥时候的事,现在说已经晚了)。因为mysql隐式转换的特性,向varchar字段写入int类型的值时,mysql会自动转换成varchar类型(存入"0"),不会报错。但是到了正式环境向enum字段写入int时,会发生什么呢???
假如你的枚举值为:0和1。
当你插入int 且值为0的时候, 发下正式环境enum字段为空,本来enum字段是应该插入string类型的0或1 的。 但如果int, 就采用索引的方式,但MySQL的enum索引是从1开始的。0未定义,就成了空!!!
所以总结一点:少用enum字段!!!如果用enum字段,值也不要用数字!!!