我最近将MySQL从5.6升级到5.7.14,现在所有使用groupProperty
的标准查询都失败了,错误类似于下面提到的错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test_dev.this_.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这是由于MySQL处理GROUP BY
的方法目前发生了变化,here提到了这种方法。
因此,根据这些更改日志,我们可以通过以下方式解决此问题:
ONLY_FULL_GROUP_BY
,我认为这不是一个好方法。ANY_VALUE()
来引用非聚合列。但是在grails标准查询中没有使用any_value()
的选项。将查询更新为低级SQL语句或使用HQL可能有所帮助,但这需要在多个位置进行更改。
那么,有没有更好的方法可以用来处理上述情况?
如果ANY_VALUE不可用,您可以简单地使用MIN
或MAX
。
话虽如此,我宁愿调查每个查询,并从修复GROUP BY
部分开始。