MySQL中的NOTNULL列和完整性检查

MySQL中的NOTNULL列和完整性检查,mysql,notnull,Mysql,Notnull,在MySQL 5.1.48数据库中,我有一个非空列“name”的表。当我将列的值更新为NULL时,将报告带有黄色感叹号的错误(使用MySQL查询浏览器),并更新行(!)。然后该行包含空字符串,它不显示灰色空指示器 在给定的MySQL版本中,这是一个bug吗?或者我可以神奇地打开约束检查吗?MySQL有多个约束检查,其行为可能令人惊讶。在它设置的模式中,它看到的不是null,因此它提供了一个默认值 将“传统”添加到SQL模式将导致它按预期中止更新。如果希望ANSI_QUOTES和STRICT_AL

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

在给定的MySQL版本中,这是一个bug吗?或者我可以神奇地打开约束检查吗?

MySQL有多个约束检查,其行为可能令人惊讶。在它设置的模式中,它看到的不是null,因此它提供了一个默认值

将“传统”添加到SQL模式将导致它按预期中止更新。如果希望ANSI_QUOTES和STRICT_ALL_表正常运行,您可能也会对其感兴趣,但是如果您将事情做得太严格,那么针对MySQL后端编写的许多代码都会失败。

来自参考-如果您不使用STRICT模式,那么每当您在列中插入“不正确”的值时,例如,在NOTNULL列中输入NULL或在数字列中输入过大的数值,MySQL将该列设置为“尽可能最佳的值”,而不是产生错误。。。对于字符串,MySQL存储空字符串或尽可能多地存储在列中的字符串


尝试了这个
设置sql\u mode=STRICT\u ALL\u表;更新表集合名称=null,其中id=l
,但它以静默方式失败(无错误)。能否添加
SELECT@@sql\u模式的输出以验证是否已正确设置?您不需要这样做,但可以尝试在
my.cnf
中设置服务器模式,然后重新启动服务器。