MySQL枚举总是包含''(空字符串)的可能性

时间:2009-12-08 17:05:30

标签: mysql enums

我正在尝试使用PhpMyAdmin在MySQL中创建一个简单的“是”/“可能”/“否”枚举 我将NULL设置为No,并将'maybe'设置为默认值

我在执行“SET EnumCol =''”之类的操作时遇到错误,因为''(空字符串)不应该是有效值。 但是查询被执行并且值被设置为'' - 这意味着每当我从数据库中读取时,我都被迫仔细检查这个不需要的和非法的值!

这是MySQL或PhpMyAdmin中的错误吗? 有没有人知道一种禁用这种行为的方法?

感谢。

2 个答案:

答案 0 :(得分:23)

空字符串是ENUM中无效值的错误指示符。来自mysql ENUM type manual

  

如果在ENUM中插入无效值(即,允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值。此字符串可以

更多关于此字符串的事实。通过该字符串具有数值0的事实来区分“正常”空字符串。

要禁用此行为:

  

如果启用了严格的SQL模式,则尝试插入无效的ENUM值会导致错误。

要启用严格模式,请参阅Server SQL Modes

答案 1 :(得分:-2)

ENUM是一个痛苦的屁股。除非您还需要通过数字设置值,否则我会远离它们。

相反,使用带有查找表的外键的varchar列来限制值。这将导致无法插入错误值。