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了。