当 MySQL 允许我将 aNULL
插入使用NOT NULL
. 我做了一些研究,发现了如何启用严格模式。但是,我不太确定STRICT_ALL_TABLES
启用 MySQL 时会执行什么验证。
手册说:
严格模式控制 MySQL 如何处理无效或丢失的输入值。一个值可能由于多种原因而无效。(强调我的)例如,它可能具有错误的列数据类型,或者它可能超出范围。
我了解它认为缺少什么以及如何处理它。我不清楚它认为什么无效。我做了一些测试并发现了以下内容:
- 太长的字符串无效
- 超出范围的数字无效
NULL
非NULL
列的 s 无效TRUE
并且FALSE
似乎总是有效的(它们分别变为 1 和 0)- 无效日期无效
- 零日期有效(可以启用其他模式来更改此行为)
- 整数字段中的浮点数是有效的(它们被四舍五入)
- 数字字段中的字母无效
除了上面提到的之外,MySQL 是否进行任何其他验证检查?
手册说“列的数据类型错误”,但我看到的唯一实际发挥作用的情况是数字字段中的字母。还有其他数据类型错误的例子吗?
是否有一个关于 MySQL 执行的检查的列表?
编辑:作为记录,我的应用程序已经进行了广泛的验证。我使用严格模式作为最后的机会,以防万一。如果我忘记检查某些内容,我希望它快速失败,而不是“默默地破坏我的数据”。