[ MySQL ] 8.0 修改 only_full_group_by 默认分组问题
如果查数据时 报错 sql_mode=only_full_group_by 这种情况是因为你的mysql不支持多select分组,进行如下配置即可:
查询版本:
SELECT VERSION();
8.0.12
方法一:直接修改数据库配置
首先,打开数据库,输入
select @@global.sql_mode;
# 返回值如下
> ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 果里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROUP_BY即可
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
但是,当我们再一次重新启动数据库时,可能会恢复原样,还是会出现ONLY_FULL_GROUP_BY的报错,这就需要我们再一次修改数据库配置。
方法二:修改数据库配置(永久生效)
修改配置文件my.ini
在[mysqld]模块下新增一行配置:
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
运行后重启,即可生效
方法三:使用 any_value() 或 group_concat()
1. any_value():将分到同一组的数据里第一条数据的指定列值作为返回数据。 (any_value()函数就是MySQL提供的用来抑制ONLY_FULL_GROUP_BY值被拒绝的)
select Beijing,any_value(Shanghai) from city group by Beijing
2. group_concat():将分到同一组的数据默认用逗号隔开作为返回数据
select Beijing,group_concat(Shanghai) from city group by Beijing
标题:[ MySQL ] 8.0 修改 only_full_group_by 默认分组问题
作者:llilei
地址:http://solo.llilei.work/articles/2022/12/13/1670901283589.html