背景介绍:
公司项目要进行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.
参考文档:

1810

被折叠的 条评论
为什么被折叠?



