我被这件事弄糊涂了。我以前使用过MySQL5.7x,并且一直能够通过从mysql配置中的ONLY_GROUP_BY中删除sql_modes来解决这个问题。然而,今天我似乎无法做到这一点,即使从sql_modes设置中删除它也不能阻止我收到此错误。
我知道是什么导致了这个错误,而且我知道有一项工作可以添加到SQL中,但是我没有时间修复我们应用程序中导致这一点的litteral数百个查询。
SQLMode设置为mysql.cnf:
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'但是,在运行存储的proc时,它仍然会产生错误:
SQLSTATE42000:语法错误或访问冲突: 1140在不分组的聚合查询中,SELECT列表的表达式#1包含非聚合列'schema.emp.company_id';这与sql_mode=only_full_group_by不兼容
有谁知道为什么mySQL似乎没有意识到该选项已被禁用?
我运行的是5.7.21-0ubuntu0.17.10.1 (在Ubuntu17.10上,不足为奇!)
发布于 2018-04-03 10:40:14
好吧,为了使整个问题的奇异性翻一番,看起来如果您删除并重新创建存储的proc (没有任何代码更改,它完全相同),那么问题就消失了。
这个模式不是现有的,mySQL在它之上升级了,几周前我在我的机器上重新安装了Ubuntu17.10,并将从备份到它的所有内容都恢复了。
我无法解释上面的内容,我只能在mySQL编译(?)时假定它缓存了sql模式。储存的过程我不知道当您创建它们时,它是否会编译,但是它显然是在缓存一些东西。
https://stackoverflow.com/questions/49626303
复制相似问题