当MySQL允许我将NULL
插入使用NOT NULL
创建的字段时,我感到非常惊讶。我做了一些研究,发现了如何启用严格模式。但是,我不太确定启用STRICT_ALL_TABLES
时MySQL的验证。
手册说:
严格模式控制MySQL如何处理无效或缺失的输入值。 由于多种原因,值可能无效。(强调我的)例如,列可能包含错误的数据类型,或者可能超出范围。
我理解它认为缺少什么以及它如何处理。我不清楚它认为无效。我做了一些测试并发现了以下内容:
NULL
列的NULL
无效TRUE
和FALSE
似乎总是有效(分别为1和0)除了上面提到的内容之外,MySQL是否会进行任何其他验证检查?
手册中说“列的数据类型错误”,但我看到实际发挥作用的唯一情况是数字字段中的字母。是否有其他数据类型错误的例子?
是否列出了MySQL执行的确切内容?
编辑:为了记录,我的应用程序已经进行了大量验证。我使用严格模式作为最后机会,只是在案例检查。如果我忘记检查某些内容,我希望快速失败而不是“默默地破坏我的数据”。
答案 0 :(得分:8)
一个好的资源是检查MySQL源代码,并在设置STRICT模式或TRADITIONAL模式(这是STRICT的超集)之后阅读mysql-test/t/strict.test
以查看他们测试的所有案例。
你做了很好的研究和测试,但还有一些案例,例如:
同样是mysql-test/include/strict_autoinc.inc
,因为当auto-inc值变得太大时,它会测试溢出。
还有一些其他测试文件使用STRICT模式进行特定测试,但我没有检查它们。
答案 1 :(得分:3)
我使用MySQL 5.5.28(社区服务器版)的源代码来查找正在使用的STRICT_ALL_TABLES的实例。
从我看到的情况看,你的列表看起来已经相当完整,但下面是我学习使用STRICT_ALL_TABLES的更多内容。第一个是另一个验证,而其余的都处理错误和警告。