mysql - 尽管 sql_mode 为空,存储过程仍引发 "incompatible with sql_mode=only_full_group_by"

标签 mysql mysql-5.7

我有一个在 MySQL 5.6 上运行良好的存储过程。在最近的服务器迁移过程中,我们升级到 MySQL 5.7.19。

我的存储过程现在抛出错误:

SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“utility-monitor.daily_readings.building_id”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容:CALL Monthly_readings(2017, 1, NULL, 1, 1))

我已通过/var/mysql/my.cnf文件将sql_mode设置为"",重新启动mysql服务并通过控制台登录,通过SELECT @@sql_mode;

确认sql_mode为空

尽管如此,当我尝试运行存储过程时,我仍然收到上述错误。

接下来我可以做什么来继续排除此错误的根源?

最佳答案

根据documentation ,MySQL 使用您创建过程时处于事件状态的 sql 模式:

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.

因此,使用激活的不同模式(或修复 group by 语法)重新创建该过程(或全部过程,因为它可能不是唯一受影响的过程)。尽管文档中提到了,但改变过程是不够的。您应该考虑不要为此永久更改 sql 模式(尽管您可能还有其他不兼容的代码)。

关于mysql - 尽管 sql_mode 为空,存储过程仍引发 "incompatible with sql_mode=only_full_group_by",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58360796/

相关文章:

mysql - 想要找到旧数据库

Mysql 转换为单选查询

mysql - 在 MySQL 5.7.x+ 中重置 'root' 用户密码

MySQL 位值导出 DML 问题

MySQL 5.7 - JSON 索引 - 生成具有非标量值的列

mysql - 通过MySql命令行客户端连接数据库

mysql - 如何在 MySQL 中获取一个特定 JSON 键的值

mysql - 我正在尝试优化这个 mysql 查询

mysql order by with union 似乎不起作用

php/mysql 将州附加到城市