MySQL中的非空列和完整性检查

时间:2011-11-08 10:12:35

标签: mysql notnull

在MySQL 5.1.48数据库中,我有一个带有NOT NULL列'name'的表。当我将列的值更新为NULL时,会报告带有黄色感叹号的错误(使用MySQL查询浏览器)并更新行(!)。该行然后包含空字符串,它不显示灰色NULL指示符。

这是给定MySQL版本中的错误吗?或者我可以神奇地启用约束检查吗?

2 个答案:

答案 0 :(得分:1)

MySQL有多个SQL Modes,其行为可能令人惊讶。在你设置的模式中,它看到的不是null,所以它提供了一个默认值。

将“TRADITIONAL”添加到SQL模式将导致它按预期中止更新。如果你希望它能够正常运行,你可能也会对ANSI_QUOTES和STRICT_ALL_TABLES感兴趣,但是如果你把事情做得太严格,很多代码编写MySQL后端的代码都会失败。

答案 1 :(得分:1)

从引用 - 如果您没有使用严格模式,那么每当您向列中插入“不正确”值时,例如将NULL转换为NOT NULL列或将过大的数值转换为数字在列中,MySQL将列设置为“最佳可能值”而不是产生错误。 ...对于字符串,MySQL存储空字符串或尽可能存储在列中的字符串

Constraints on Invalid Data