mysql5.7报错this is incompatible with sql_mode=only_full_group_by

下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by语句就报错,然后又把它移除了。

一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了

only_full_group_by 模式开启比较好。

因为在 mysql 中有一个函数: any_value(field) 允许,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)。

 

具体出错提示:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1、查看sql_mode

01
select @@global.sql_mode;

查询出来的值为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、去掉ONLY_FULL_GROUP_BY,重新设置值。

01
set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

3、上面是改变了全局sql_mode,对于新建的数据库有效。


评论区

JFinal

2019-03-01 18:10

mysql 高版本的这个问题很多人碰到过,造成了一定的困扰,感谢分享

楼顶的小草

2019-07-04 13:12

这个要配置成数据库重启后,还能存在的全局变量配置,应该怎么做呢?改配置文件(my.cnf)?

摘星星的猴子

2019-07-08 09:23

感谢分享!

happyboy

2019-07-24 18:05

如果是linux系统,修改/etc/my.cnf文件:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER。关键是得有这个NO_AUTO_CREATE_USER,修改后重启mysql,就可以了。windows环境下修改my.ini,修改同理。这样处理也很简单

steven_lhcb_9527

2021-10-08 16:02

@happyboy 如果是线上,最好先改global.sql_mode,在修改配置文件里面的。这样就不用重启,线上可不太敢频繁重启

热门分享

扫码入社