MySQL枚举空值

MySQL枚举空值,mysql,Mysql,我试图理解如何在mysql中使用枚举。 如果我在enum字段中插入任何超出enum类型的内容——mysql将插入空字符串(值为0) 水果名(‘苹果’、‘香蕉’、‘桃子’) 插入。。。香蕉果 简单的拼写错误和MySQL插入空值,破坏了数据库的完整性,使枚举极其无用 检查约束在这里可能会有所帮助,但MySQL不支持它们(对于2011年“最受欢迎”的数据库来说非常有趣) 我看到的唯一方法是编写触发器以防止出现空字符串,但对于这样一个简单的情况,编写触发器的工作量太大了 有没有办法禁用枚举的“空字符

我试图理解如何在mysql中使用枚举。 如果我在enum字段中插入任何超出enum类型的内容——mysql将插入空字符串(值为0)

  • 水果名(‘苹果’、‘香蕉’、‘桃子’)
  • 插入。。。香蕉果
简单的拼写错误和MySQL插入空值,破坏了数据库的完整性,使枚举极其无用

检查约束在这里可能会有所帮助,但MySQL不支持它们(对于2011年“最受欢迎”的数据库来说非常有趣)

我看到的唯一方法是编写触发器以防止出现空字符串,但对于这样一个简单的情况,编写触发器的工作量太大了

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


谢谢

看看sql模式

SET SQL_MODE='TRADITIONAL';
按照

如果在枚举中插入无效值(即,允许值列表中不存在的字符串),则会将空字符串作为特殊错误值插入。此字符串与“普通”空字符串的区别在于此字符串的数值为0

另一方面,我()建议您避免使用枚举,因为它们效率不高

如果你真的需要枚举,考虑使用严格模式。在尝试向枚举列中插入无效值时,严格模式至少会引发错误。否则,只会引发警告,并且该值仅设置为空字符串“”(内部引用为0)。注意:如果使用“忽略”,则在严格模式下仍然可以抑制错误

这里有一个链接到

快乐编码

更新:尼克的回答是将服务器设置为严格模式的一种方法。传统模式相当于STRICT_TRANS_表、STRICT_ALL_表、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER,因此请记住,您将对其他数据类型执行额外的数据验证,例如DATE