📅  最后修改于: 2023-12-03 15:17:49.084000             🧑  作者: Mango
MySQL的严格模式(strict mode)旨在强制执行更严格的数据插入、更新和选择行为,主要是为了确保数据的完整性和一致性。在严格模式下,如果数据不符合特定的要求,MySQL会生成相应的错误信息并拒绝这些操作。
MySQL中的严格模式可以通过以下方式开启:
编辑MySQL配置文件my.cnf
,在[mysqld]
下加入如下代码:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在需要开启严格模式的会话中执行以下命令:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
在严格模式下,以下操作将会产生错误:
在NO_ZERO_IN_DATE
和NO_ZERO_DATE
模式下,要求日期和时间类型的值不能为'0000-00-00'或'0000-00-00 00:00:00'。
在ERROR_FOR_DIVISION_BY_ZERO
模式下,对0进行除法运算将会产生错误。
在STRICT_TRANS_TABLES
模式下,对于CHAR、VARCHAR、BINARY和VARBINARY类型的列,如果插入的数据长度超过列的定义长度,将会产生错误。
在NO_AUTO_CREATE_USER
模式下,如果插入的数据中想要插入NULL值,但这个值又没有明确地指定,MySQL将不会自动赋值为NULL,而是产生错误。
开启MySQL严格模式可以帮助程序员尽可能地减少数据错误,保证数据的准确性和完整性,从而提高系统的安全性和可靠性。但也要注意,强制执行严格模式可能会影响系统性能,因此需要根据实际情况进行决策。