升级到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

posted on 2025-03-08 22:28  愤怒的苹果ext  阅读(32)  评论(0)    收藏  举报

导航