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.youkuaiyun.com/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 Statementsicon-default.png?t=O83Ahttps://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-优快云博客

https://stackoverflow.com/questions/45560680/stored-procedure-raising-incompatible-with-sql-mode-only-full-group-by-despite

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮雨疏桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值