关闭MySQL 5.7及以上版本的严格模式
mysql的严格模式是指:
MySQL严格模式说明:
不支持对not null字段插入null值;
不支持自增字段插入” “值;
不支持text字段有默认值;
方法一:临时关闭(当前会话)
1 2 3 4 |
SET sql_mode = ''; -- 或者更精确地移除严格模式 SET sql_mode = (SELECT REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', '')); SET sql_mode = (SELECT REPLACE(@@sql_mode, 'STRICT_ALL_TABLES', '')); |
方法二:永久关闭(修改配置文件)
-
找到 mysql 的配置文件(通常是 my.cnf 或 my.ini)
-
Linux: /etc/mysql/my.cnf 或 /etc/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf
-
Windows: C:\Program Files\mysql(MariaDB) XX.X\data\my.ini
-
-
在 [mysqld] 部分添加或修改以下行:
12[mysqld]sql_mode="NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER" -
重启 mysql 服务使更改生效:
1234# Linux 系统systemctl restart mysql# Windows 系统使用服务管理器重启 mysql 服务
方法三:动态修改全局设置
1 2 3 |
SET GLOBAL sql_mode = ''; -- 或 SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', '')); |
验证更改
1 |
SELECT @@sql_mode; |
注意事项
-
关闭严格模式后,mysql 会对无效数据更宽容(如截断字符串而不是报错)
-
生产环境不建议关闭严格模式,因为它有助于数据完整性
-
如果只想修改特定严格模式选项而不是全部关闭,可以精确调整 sql_mode 值
常见的 sql_mode 值包括:
-
STRICT_TRANS_TABLES:事务表的严格模式
-
STRICT_ALL_TABLES:所有表的严格模式
-
NO_ZERO_IN_DATE:禁止日期中的零值
-
NO_ZERO_DATE:禁止 ‘0000-00-00’ 日期
-
ERROR_FOR_DIVISION_BY_ZERO:除零错误