升级到MySQL8 GROUP BY的异常
@
异常详情

- 1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx.xxx.value' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
异常原因
- 在严格模式下(MySQL8默认开启),对于group by聚合操作,若使用的列没有在group by中出现,那么这个SQL就是不合法的。
解决方案
方案一
- 报错的列加入
any_value函数,返回一个特定列的任意值。这个函数特别适用于那些不需要确定具体哪一个值的场景,可以避免group by时出现的错误。如下图所示。

方案二
- 先查询出当前
sql_mode,然后删除其中ONLY_FULL_GROUP_BY,执行SQL重新设置全局sql_mode。如下图所示。

- 设置全局sql_mode语句如下:
set global sql_mode=’XXXX';
- 注:重启后失效,适用于不方便重启MySQL的情况。
方案三
- 先查询一下当前
sql_mode,在原基础上删除sql_mode删除ONLY_FULL_GROUP_BY,放到MySQL配置文件[mysqld]里,重启MySQL。结果如下图。



- 使用的命令:
select @@GLOBAL.sql_mode # 先查询当前的sql_mode
- MySQL配置文件中新增一行:
[mysqld]
...省略...
sql_mode='xxx' #在原基础上删除sql_mode删除ONLY_FULL_GROUP_BY
浙公网安备 33010602011771号