尽管sql_mode为空,但存储过程引发“与sql_mode = only_full_group_by不兼容”

时间:2017-08-08 06:21:33

标签: mysql mysql-5.7

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

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

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'utility-monitor.daily_readings.building_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by: CALL monthly_readings(2017, 1, NULL, 1, 1))

我已经通过sql_mode文件将""设置为/var/mysql/my.cnf,重新启动了mysql服务并通过控制台登录以确认sql_mode是空白的SELECT @@sql_mode; 1}}

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

接下来我该怎么做才能继续排查此错误的来源?

1 个答案:

答案 0 :(得分:5)

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

  

MySQL在创建或更改例程时存储有效的sql_mode系统变量设置,并且始终使用此设置执行例程,而不管例程开始执行时当前服务器SQL模式如何。

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