MySQL - 获取1140错误...这与sql_mode = only_full_group_by不兼容,但已禁用

时间:2018-04-03 09:13:52

标签: mysql

我有点难过。我之前使用过mysql 5.7x,我总是能够通过从mysql配置中的sql_modes中删除ONLY_GROUP_BY来解决这个问题。但是,今天我似乎无法这样做,即使从sql_modes设置中删除它也不会阻止我收到此错误。

我知道导致错误的原因,我知道有一个可以添加到SQL的解决办法,但是我没有时间在我们的应用程序中修复数百个查询导致这种情况。

mysql.cnf中的SQLMode设置:

sql_mode = " ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后通过运行查询确认:

SELECT @@SQL_MODE;

结果:

'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

但是,在运行存储过程时,它仍会产生错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1140在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列' schema.emp.company_id&#39 ;;这与sql_mode = only_full_group_by

不兼容

有谁知道为什么mySQL似乎没有意识到该选项已被禁用?

我正在运行5.7.21-0ubuntu0.17.10.1(在Ubuntu 17.10上,不足为奇!)

1 个答案:

答案 0 :(得分:0)

好吧,只是为了使整个问题的奇异性加倍,看来如果你删除并重新创建存储过程(没有代码更改,它完全相同),问题就会消失。

这个架构不是现有架构,mySQL升级了它,几周前我在我的机器上全新安装了Ubuntu 17.10,并将备份恢复到了它上面。

我无法解释上述情况,我只能假设mySQL在编译(?)存储过程时缓存sql模式。我不知道当你创建它们时它是否编译,但它明确地缓存了一些东西。