当前会话的sql_mode可通过SELECT @@sql_mode;或SELECT @@SESSION.sql_mode;查看,返回逗号分隔的模式名;全局默认值用SELECT @@GLOBAL.sql_mode;查看,仅影响新连接;SHOW VARIABLES LIKE 'sql_mode';需关注Value列内容;会话与全局值可能因SET SESSION、框架初始化或客户端工具而不同。

查看当前会话的 sql_mode
你连上 MySQL 后执行的每条语句,都受当前会话(SESSION)的 sql_mode 控制。要确认此刻正在用哪一套规则,直接查:SELECT @@sql_mode; 或更明确地写 SELECT @@SESSION.sql_mode;。
返回值是一串逗号分隔的模式名,比如 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_DATE —— 这就是当前连接实际生效的全部规则。
查看全局默认的 sql_mode
全局设置影响所有**新建立**的连接,但不会改变已存在的会话。用这条命令看:SELECT @@GLOBAL.sql_mode;
注意:如果你刚改过全局模式,但没重连,当前窗口仍沿用旧会话值,别误以为没生效。
用 SHOW VARIABLES 查也行,但要注意字段名
这条命令也能查:SHOW VARIABLES LIKE 'sql_mode';
它返回一个结果集,Variable_name 是 sql_mode,Value 才是你要的字符串。别只扫一眼就走,得看 Value 列的内容 —— 很多人复制粘贴时漏掉这步,以为没查到。
为什么两个值可能不一致?
常见原因有:
• 有人用 SET SESSION sql_mode = ... 临时改过当前连接
• 应用框架(如 Django、Laravel)启动时自动设了会话级模式
• MySQL 客户端工具(如 MySQL Workbench、DBeaver)自带初始化脚本
• 某些云数据库控制台会默认覆盖会话模式
所以线上排查问题时,优先查 @@sql_mode,而不是只信配置文件或全局值。


















