2011-11-17 147 views
8

我想了解如何在MySQL中使用枚举。 如果我插入任何枚举字段超出枚举类型 - mysql插入空字符串(值为0)。MySQL枚举空值

  • 果实ENUM('APPLE','BANANA','PEACH');
  • INSERT ...水果= 'BANNANA'

简单的拼写错误和MySQL插入空值,打破了数据库的完整性,使枚举非常无用。

CHECK约束可以帮忙,但是MySQL不支持他们(很有趣在2011年“最受欢迎”的数据库)

我看到的唯一方法是编写触发器,以防止空字符串,但实在是太多了为这样一个简单的案例写作触发器。

是否有办法禁用“空字符串”的MySQL行为的枚举?

感谢

回答

4

看看SQL模式

SET SQL_MODE='TRADITIONAL'; 
8

由于每documentation:

如果插入了无效的值插入ENUM(即字符串中的列表中不存在的允许值),则将插入空字符串作为特殊错误值。由于该字符串的数值为0,因此该字符串可以与“正常”空字符串区分。

在旁注中,我建议您避免枚举,因为它们效率不高。

如果您确实需要枚举,请考虑使用严格模式。当您尝试将无效值插入ENUM列时,严格模式至少会引发错误。否则,只会引发警告,并将值简单地设置为空字符串''(内部引用为0)。注意:如果使用IGNORE,在严格模式下错误仍然可以被抑制。

这里是链接到documentation on setting your MySQL server mode

快乐编码!

更新: Nick的答案是以严格模式设置服务器的一种方法。 TRADITIONAL模式相当于STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,因此请记住,您将在其他数据类型(例如DATE)上执行其他数据验证。