Mysql “this is incompatible with sql_mode=only_full_group_by” 问题解决
背景介绍:
公司项目要进行mysql升级, 从 5.7 升级到 8.0,需要进行影响调查, 找了个测试服务器,装了 mysql8.0.32进行测试,标题错误,我遇见了两次:
1. WEB 程序报标题错误
2. procedure 报标题错误
1.WEB 程序报标题错误,解决方案
WEB 程序报标题错误的时候, 就搜怎么解决, 都说修改 sql_mode 就OK
参照博客:
https://blog.csdn.net/weixin_43102784/article/details/136162801
# 确认 sql_mode
SELECT version(),@@SESSION.sql_mode,@@GLOBAL.sql_mode;
# 更新sql_mode (选中你自己使用的DB)
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
刷新 WEB 程序, 不报错了
这样改有个问题, 就是重启 mysql 后, 还是会报这个错误, 想要长期有效,需要更改配置文件
vim /ect/my.cnf
找到 sql_mode 关键字, 删掉 only_full_group_by
如果没有 sql_mode 配置,则将下面的语句贴到 [mysqld] 的最后
sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
2. Procedure 报标题错误解决
由于我导库的时候,sql_mode 还没改,用的还是 default 值
而 procedure 是创建的时候采用什么样的 sql_mode, 以后调用的时候还采用创建时候的 sql_mode, 所以,即便后来改了 sql_mode,也对 procedure 不管用
解决办法是将 procedure 删掉重新 create 一下,再执行就没问题了
官方声明:
MySQL stores the sql_mode system variable setting in effect when a routine is created or altered, and always executes the routine with this setting in force, regardless of the current server SQL mode when the routine begins executing.
MySQL :: MySQL 8.0 Reference Manual :: 15.1.17 CREATE PROCEDURE and CREATE FUNCTION Statementshttps://dev.mysql.com/doc/refman/8.0/en/create-procedure.html
参考文档:
MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.1.11 サーバー SQL モード
mysql8.0出现this is incompatible with sql_mode=only_full_group_by解决方案_mysql 8.0 group by clause; this is incompatible w-CSDN博客
https://stackoverflow.com/questions/45560680/stored-procedure-raising-incompatible-with-sql-mode-only-full-group-by-despite