前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MySQL高版本使用group by报错的解决办法

MySQL高版本使用group by报错的解决办法

作者头像
水煮麥楽雞
发布2022-11-20 14:54:45
发布2022-11-20 14:54:45
1.3K00
代码可运行
举报
文章被收录于专栏:Find­My­FUNFind­My­FUN
运行总次数:0
代码可运行

MySQL 5.7.5及以上版本启用了依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。而5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。

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

看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。

接下来直接说一下解决问题的过程。

先进入MySQL客户端执行命令

代码语言:javascript
代码运行次数:0
复制
    select @@GLOBAL.sql_mode;

看到上面返回命令行的第一段---> ONLY_FULL_GROUP_BY;

网上给出的解决方法有大概三种,一种是在程序代码的语句里,给查询条件的列增加聚合函数,如果你这样做,那么就很麻烦了,而且以在开发过程中使用group by的语句都要下功夫,这个方法就算了。

推荐直接关掉这个配置项。

那么怎么把这一项关掉呢,直接在客户端执行命令关掉不就可以了么,set @@global.sql_mode = .......,执行成功,然后执行命令查看一下,果然第一项不在了,然后我们再重启一下mysql服务,再次查询,还在..哈哈。。

那么,接下来放绝招了,还是从Mysql的配置文件下手吧。

找到my.cnf,编辑它~把以下命令放到合适位置,重启mysql 服务,OK~报错没啦~

代码语言:javascript
代码运行次数:0
复制
[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

千万要注意的是,网上很多方案都差不多,但是就是成功不了,原因是网上很多帖子给出的方案都是前面多了一个set,按照上面的方法就可以了~

代码语言:javascript
代码运行次数:0
复制
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

版权属于:。。。源

本文链接:https://cloud.tencent.com/developer/article/2169605

转载时须注明出处及本声明。我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2py75w7904qok

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档