tidb数据库更改sql_mode报错

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.8
  • 【问题描述】:登录tidb数据库后,修改全局系统变量sql_mode时报错
    当set GLOBAL sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FORDIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;命令时报错,然后删掉ERROR_FORDIVISION_BY_ZERO就好了,不知道ERROR_FORDIVISION_BY_ZERO有什么用,为什么添加失败呢

之前测试一直没有问题,今天上生产环境就出现这个报错,目前生产环境没有ERROR_FORDIVISION_BY_ZERO这个配置,不知道有啥影响没

这个参数对吗?测试环境怎么设置的?这个是管 分母为0 时,数据库报不报错的

之前就是这个环境,把数据全清掉后新导入的生产数据,之前测试的时候参数是这个:
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

嗯,所以怀疑你的参数是写错了,2个不一样的啊

这次变更的操作步骤是:
1、先按照tidb的默认参数导入数
2、然后修改sql_mode参数由默认参数的ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION修改为
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FORDIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,删掉了ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES参数
3、清理集群数据

tiup cluster clean tidb-cluster --all

4、又重新导入生产数据,然后修改sql_mode参数就报错了

set @@GLOBAL.sql_mode='';
set GLOBAL sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FORDIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

不纠结你步骤2 为什么能成功了,你 ERROR_FOR_DIVISION_BY_ZERO 和 ERROR_FORDIVISION_BY_ZERO,这2个写法不一致的,正常是 ERROR_FOR_DIVISION_BY_ZERO

哦对,我重新执行了没问题,非常感谢

:ok_hand:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。