当MySQL允许我在用NOT NULL创建的字段中插入NULL时,我感到非常惊讶。我做了一些研究,发现了如何启用严格的模式。但是,我不太确定当启用MySQL时STRICT_ALL_TABLES会做什么验证。
手册上写着:
严格模式控制MySQL如何处理无效或缺失的输入值。A值可能由于以下几个原因而无效。例如,(强调雷)可能对列具有错误的数据类型,或者它可能超出了范围。
我理解它认为遗漏了什么,以及它是如何处理的。我不清楚它认为什么是无效的。我做了一些测试,发现了以下内容:
NULL列的NULLs无效。TRUE和FALSE似乎总是有效的(它们分别变成1和0)除了上面提到的以外,MySQL还有其他的验证检查吗?
手册上写着“列的数据类型错误”,但我看到的唯一情况是,这实际上是数字字段中的字母。还有其他数据类型错误的例子吗?
在某个地方是否有MySQL执行的检查的列表?
编辑:为记录,我的应用程序已经做了广泛的验证。我用严格的方式作为最后的机会,以防万一。如果我忘记检查某件东西,我希望它快速失效,而不是“悄悄地损坏我的数据”。
发布于 2012-12-12 17:38:00
一个好的资源是检查MySQL源代码,并阅读mysql-test/t/strict.test来查看他们在设置严格模式或传统模式(这是一个超集的严格模式)之后测试的所有情况。
您做了很好的研究和测试,但是还有几个案例,例如:
此外,mysql-test/include/strict_autoinc.inc,因为它测试溢出时,汽车公司的价值增长太大。
还有一些其他测试文件对特定的测试使用严格的模式,但我没有检查它们。
发布于 2012-12-12 18:49:17
我查看了MySQL 5.5.28 (Community )的源代码,以查找正在使用的STRICT_ALL_TABLES实例。
据我所见,您的列表看起来已经很完整了,但是下面是我了解到的关于STRICT_ALL_TABLES使用的更多内容。第一个是另一个验证,其余的都处理错误和警告。
https://stackoverflow.com/questions/13810562
复制相似问题