MySQL报错:this is incompatible with sql_mode=only_full_group_by 解决方法

文章讲述了在MySQL项目中遇到的功能依赖GROUPBY列的问题,由于SQL模式设置为ONLY_FULL_GROUP_BY导致。解决方法是检查并修改MySQL配置文件,移除该模式,重启服务器后验证设置是否正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


项目场景:

提示:这里简述项目相关背景:

which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

请添加图片描述
它在功能上不依赖于GROUP BY子句中的列;这与sqlmode=onlyfull_groupby不兼容


原因分析及解决方案:

提示:这里填写问题的分析该及问题的具体解决方案:

这个问题与MySQL的SQL模式设置有关,具体来说是ONLY_FULL_GROUP_BY模式。
这个模式要求:当使用GROUP BY时,SELECT的列必须在GROUP BY子句中,或者它们必须被一个聚合函数所包含。

所以需要知道当前MySQL服务器的sql_mode设置:

SELECT @@global.sql_mode;

如果你看到ONLY_FULL_GROUP_BY在返回的结果中,那就是这个问题。

我的返回结果:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
在这里插入图片描述
要永久解决这个问题,需要修改MySQL服务器的配置文件以移除ONLY_FULL_GROUP_BY。这个配置文件的位置取决于你的操作系统和MySQL版本,但是通常位于my.ini 配置文件中

找到一个名为[mysqld]的部分,其中包含了各种设置。需要找到sql_mode设置,并从其中移除ONLY_FULL_GROUP_BY

根据上面我的返回结果,我的sql_mode设置应该将其设置为:

[mysqld]  
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

在这里插入图片描述

保存并关闭配置文件后,需要重启MySQL服务器以使更改生效。在大多数系统上,可以通过任务管理器中找到mysql,打开服务:
在这里插入图片描述

最后再次打开Navicat看看是否报错,并重新运行SELECT @@global.sql_mode;及时检查
在这里插入图片描述


总结:

提示:这里填写该问题的解决过程的总结:

查询当前MySQL服务器的sql_mode设置。

SELECT @@global.sql_mode;

去掉返回结果中的ONLY_FULL_GROUP_BY,,只保留STRICT及后面的东西:sql_mode='STRICT_XXXXX'

然后重启 mysql服务器,打开Navicat重新运行查询当前MySQL服务器的sql_mode设置的代码,看返回结果中是否还包含GROUP_BY,不包含就对了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈喇子!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值