«

MySQL sql_mode严格模式报错修复方法

时间:2026-11-15 07:15     作者:emer     分类: MySQL


前言

导入或写入时报 "Data too long"、"Incorrect value"、"STRICT_TRANS_TABLES",多是 sql_mode 严格模式拒绝了不规范数据。不同版本默认值不同,老代码迁移常踩。本文讲解查看、临时修改、永久配置、常见报错对照。

操作步骤

1. 查看当前 sql_mode

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

2. 临时取消严格模式(当前会话)

SET SESSION sql_mode='';

3. 全局临时修改

SET GLOBAL sql_mode='NO_ENGINE_SUBSTITUTION';

4. 永久写入 my.cnf

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

重启生效。

5. 常见严格规则

STRICT_TRANS_TABLES 严格校验类型;NO_ZERO_DATE 禁止零日期;ONLY_FULL_GROUP_BY 要求 group by 列完整。

6. 校验

SELECT @@sql_mode;

常见坑

  1. 只改 SESSION,重连回到全局默认,问题复现。
  2. 永久改 my.cnf 后没重启,配置不生效。
  3. 关闭严格模式会让脏数据写进去,掩盖代码问题。
  4. ONLY_FULL_GROUP_BY 导致老 GROUP BY 查询报错,建议修 SQL 而非关模式。
  5. 云数据库参数组里修改,别只改本地文件。
  6. 不同版本默认 sql_mode 差异大,迁移先对齐。
  7. 改全局后已有连接仍用旧值,需重连。

总结

先 SELECT @@sql_mode 定位规则,SET GLOBAL 临时调,my.cnf 永久写并重启。优先修不规范 SQL 而非全盘关闭严格模式;ONLY_FULL_GROUP_BY 等规则建议保留。改全局后重连,云库走参数组。

遇到问题加QQ23979811 协助处理

标签: MySQL 报错 sql_mode 严格模式