我有点难过。我之前使用过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上,不足为奇!)
答案 0 :(得分:0)
好吧,只是为了使整个问题的奇异性加倍,看来如果你删除并重新创建存储过程(没有代码更改,它完全相同),问题就会消失。
这个架构不是现有架构,mySQL升级了它,几周前我在我的机器上全新安装了Ubuntu 17.10,并将备份恢复到了它上面。
我无法解释上述情况,我只能假设mySQL在编译(?)存储过程时缓存sql模式。我不知道当你创建它们时它是否编译,但它明确地缓存了一些东西。