当我发现MySQL允许我向一个被创建成
手册说:
“严格模式控制MySQL处理无效或缺失的输入值。值可能因为多种原因而无效。例如,它可能对于列来说有错误的数据类型,或者超出范围。”
我理解它认为什么是缺失的和它如何处理。我不清楚它认为什么是无效的。我进行了一些测试并发现以下内容:
- 字符串过长是无效的 - 超出范围的数字是无效的 - 对于非
MySQL除了上述提到的检查之外,还进行其他验证吗?
手册说“列的数据类型错误”,但我看到这实际上只在数字字段中出现字母的情况下才会发生。还有其他数据类型错误的例子吗?
是否有一个清单列出了MySQL执行的确切检查内容?
编辑:就记录而言,我的应用程序已经进行了广泛的验证。我将严格模式用作最后一道防线,以防万一检查遗漏。如果我忘记检查某些内容,我希望它可以“尽早失败”,而不是“静默地破坏我的数据”。
NOT NULL
的字段中插入NULL
时,我感到非常惊讶。我进行了一些研究,并发现了如何启用严格模式。然而,我不确定在启用STRICT_ALL_TABLES
时MySQL执行何种验证。手册说:
“严格模式控制MySQL处理无效或缺失的输入值。值可能因为多种原因而无效。例如,它可能对于列来说有错误的数据类型,或者超出范围。”
我理解它认为什么是缺失的和它如何处理。我不清楚它认为什么是无效的。我进行了一些测试并发现以下内容:
- 字符串过长是无效的 - 超出范围的数字是无效的 - 对于非
NULL
列的NULL
是无效的
- TRUE
和FALSE
似乎总是有效的(它们分别变成1和0)
- 无效日期是无效的
- 零日期是有效的(可以启用其他模式来更改此行为)
- 整数字段中的浮点数是有效的(它们会四舍五入)
- 数字字段中的字母是无效的MySQL除了上述提到的检查之外,还进行其他验证吗?
手册说“列的数据类型错误”,但我看到这实际上只在数字字段中出现字母的情况下才会发生。还有其他数据类型错误的例子吗?
是否有一个清单列出了MySQL执行的确切检查内容?
编辑:就记录而言,我的应用程序已经进行了广泛的验证。我将严格模式用作最后一道防线,以防万一检查遗漏。如果我忘记检查某些内容,我希望它可以“尽早失败”,而不是“静默地破坏我的数据”。