MySQL中版本5.7及以上出现的ONLY_FULL_GROUP_BY问题

在MySQL5.7及以上使用group by会出现:

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.t_long.user_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现这个问题的原因是MySQL5.7中新增了一个group by的校验功能

1.如何查看你的sql_mode

SELECT @@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.如何修改配置

在MySQL的文件夹根目录下,有一个文件my.ini,(windows下为my.ini ,在linux下为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 如果没有,则在[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

 如果上述方法不成功,可以使用sql语句的方式进行替换

# 替换存在导致失败的设置

Set sql_mode=(select replace(@@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'));

这个时候就可以放心的使用group by了。



posted @ 2020-08-05 17:40  八块腹肌的青书  阅读(252)  评论(0编辑  收藏  举报
Live2D