问题重述:mysql5.7部分group by语句不能正常执行,报only_full_group_by。。
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Expression #2 of SELECT list is not in GROUP BY clause ; this is incompatible with sql_mode=only_full_group_by"
分析:出现这种问题的主要原因是,mysql5.7相较之前5.6更加严格了,如果在一个group by语句中,select后边的其它任务字段不能在group by后保持唯一,则会报上述错误,解决方案:
方案一:直接改sql57的配置,直接关掉这种模式,让它不进行这种模式的检查,这种方案适合于,老项目由sql56升级到sql57,这样不用改之前的代码,可以将影响降低到最小,具体的修改方法为:
在my.cnf的[mysqld]下面,加上如下配置:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
这样的话,就不会开启only_full_group_by检查。。
方案二:如果是新写的项目,可以在写group by语句的时候,就让select后边的所有字段保持唯一,如:之前可能用的是select * ,新写的话,可以考虑,只select 特定有用的字段,如果这个字段不能保持唯一,可以采用select any_value(name), * * 这种形式。
注意:采用方案二,如果部署到mysql5.6以下的服务器上,可能会报,不支持any_value