我正在尝试使用PhpMyAdmin在MySQL中创建一个简单的“是”/“可能”/“否”枚举 我将NULL设置为No,并将'maybe'设置为默认值
我在执行“SET EnumCol =''”之类的操作时遇到错误,因为''(空字符串)不应该是有效值。 但是查询被执行并且值被设置为'' - 这意味着每当我从数据库中读取时,我都被迫仔细检查这个不需要的和非法的值!
这是MySQL或PhpMyAdmin中的错误吗? 有没有人知道一种禁用这种行为的方法?
感谢。
答案 0 :(得分:23)
空字符串是ENUM
中无效值的错误指示符。来自mysql ENUM
type manual:
如果在ENUM中插入无效值(即,允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值。此字符串可以
更多关于此字符串的事实。通过该字符串具有数值0的事实来区分“正常”空字符串。
要禁用此行为:
如果启用了严格的SQL模式,则尝试插入无效的ENUM值会导致错误。
要启用严格模式,请参阅Server SQL Modes。
答案 1 :(得分:-2)
ENUM是一个痛苦的屁股。除非您还需要通过数字设置值,否则我会远离它们。
相反,使用带有查找表的外键的varchar列来限制值。这将导致无法插入错误值。