我试图了解如何在mysql中使用枚举.如果我将任何内容插入枚举类型之外的枚举字段 - mysql插入空字符串(值为0).
简单的拼写错误和MySQL插入空值,打破数据库完整性并使枚举非常无用.
CHECK约束可能会有所帮助,但MySQL不支持它们(2011年"最受欢迎"数据库非常有趣)
我看到的唯一方法是编写触发器以防止空字符串,但是为这样一个简单的情况编写触发器太多了.
有没有办法为枚举禁用"空字符串"MySQL行为?
谢谢
根据文件:
如果在ENUM中插入无效值(即,允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值.通过此字符串具有数字值0的事实,可以将此字符串与"正常"空字符串区分开.
在旁注中,我(和其他人)建议你避免使用枚举,因为它们效率不高.
如果您确实需要枚举,请考虑使用严格模式.当您尝试将无效值插入ENUM列时,严格模式将至少抛出错误.否则只抛出一个警告,并将值简单地设置为空字符串''(内部引用为0).注意:如果使用IGNORE,仍可以在严格模式下抑制错误.
以下是有关设置MySQL服务器模式的文档的链接.
快乐的编码!
更新: 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)执行其他数据验证.
| 归档时间: |
|
| 查看次数: |
5812 次 |
| 最近记录: |