首页/数据/数据库速查/sql_mode 常见模式与排错
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

sql_mode 常见模式与排错

sql_mode 决定严格程度与语法兼容:严格模式拒绝坏数据、ONLY_FULL_GROUP_BY 拒绝歧义分组、ANSI_QUOTES 改双引号语义。

数据库速查数据更新于 2026-10-12
用途SQL 行为开关
查看SELECT @@sql_mode;
常见项STRICT_TRANS_TABLES / ONLY_FULL_GROUP_BY / NO_ZERO_DATE / ANSI_QUOTES

查看与临时调整

查看与临时调整
SELECT @@sql_mode;
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
-- 配置文件持久化
-- [mysqld] sql_mode = STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
5.7 升级 8.0 后默认值变化明显(NO_AUTO_CREATE_USER 移除、默认严格),迁移前逐项比对两边的 sql_mode,不要盲目照搬。

易错点

  • 去掉严格模式能让脏数据写进去,但问题被推迟到查询时爆发,生产不要为了兼容而关严格模式
  • ANSI_QUOTES 开启后双引号变成标识符引用,字符串必须用单引号,老代码会大面积报错

数据来源与参考

  • MySQL 8.0 Reference Manual: Server SQL Modes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌