mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

原因:MySQL 5.7,实现检测功能的依赖。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认),MySQL拒绝选择列表查询,条件,或命令列表是指非聚合列既不是GROUP by子句中指定功能也不依赖他们。(5.7之前,MySQL不检测功能的依赖和ONLY_FULL_GROUP_BY在默认情况下不启用。 ONLY_FULL_GROUP_BY,对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在GROUP BY后面出现否则就会报错,或者这个字段出现在聚合函数里面。(Mysql5.7 GROUP BY文档说明

解决方法:

 

1.检查当前mysql版本因为5.7之前默认是禁用状态,使用select version()语句,你可以在Mysql客户端或者命令行窗口执行。

 

 2.再使用select @@GLOBAL.sql_mode,查看ONLY_FULL_GROUP_BY是否启用,如下:

 

 

3.如上ONLY_FULL_GROUP_BY代表被启用,使用如下禁用:

set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 (默认关掉ONLY_FULL_GROUP_BY!)

 

这个时候 在用工具select 一下
SELECT @@sql_mode;
SELECT @@GLOBAL.sql_mode;
 
发现已经不存在ONLY_FULL_GROUP_BY ,感觉已经OK。但是如果你重启Mysql服务的话,发现ONLY_FULL_GROUP_BY还是会存在的

 

 

4.想要彻底解决这个问题 就得去改my.ini 配置(如果你们mysql 没有这个文件,就把my-default.ini 改成my.ini,我这个版本就是没有my.ini配置问题)

 
在 [mysql]下添加
 sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 

 

资料来源:https://www.cnblogs.com/jim2016/p/6322703.html  和 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

 

posted @ 2019-11-20 10:25  MargoHu  阅读(173)  评论(0编辑  收藏  举报