ENUM类型的限制不够?

时间:2012-06-27 15:22:05

标签: mysql enums

无法找到以下问题/问题的直接答案。

我创建了一个数据库,其中一个字段的类型为ENUM,限制为NOT NULL。

它工作正常,但是当我尝试插入一个具有该字段不允许的值的记录时,记录不会被拒绝,但无论如何都要插入该字段为空。也就是说,我认为它是一个空字符串(“”),因为我添加了限制NOT NULL。

我希望记录当然会被拒绝。我怎样才能做到这一点。

我认为样本代码不是必需的,因为它是常识。

2 个答案:

答案 0 :(得分:1)

如果在ENUM列中插入了不正确的值,或者如果使用IGNORE将值强制插入ENUM列,则会将其设置为保留的枚举值0,该值在字符串上下文中显示为空字符串。

http://dev.mysql.com/doc/refman/5.1/en/constraint-enum.html

试试这个:

SET sql_mode = 'STRICT_ALL_TABLES'; or STRICT_TRANS_TABLES

取决于您的表是事务性还是非事务性。这应该通过mySQL来处理它,并使它在方法尝试运行之前使用完整性约束中止和回滚。

答案 1 :(得分:0)

我发现你应该在mysql中启用严格模式。要做到这一点,你应该:

  1. 编辑/etc/mysql/my.cnf
  2. 添加/编辑sql-mode = STRICT_ALL_TABLES
  3. 重启MySQL
  4. 这是MySQL级别的解决方案。如果您尝试在ENUM字段中插入空值,则现在应该拒绝它。