首页 > 数据库技术 > 详细

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

时间:2019-11-20 13:26:45      阅读:73      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:https://www.cnblogs.com/ccw869476711/p/11895977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!