记录MySQL报错1055:ONLY_FULL_GROUP_BY模式下的GROUP BY查询问题及解决方法

昨天在数据迁移的过程中,后台接口函数无法链,因为要模拟本地局域网,不能使用外网,所以web环境都是本地U盘下载的安装包,所有环境安装完成后运行项目发现后台无法查看数据,SQL语句会报错:“1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated”,之前遇到过类似的错误,但是没有去记录,导致问题再现时又是度娘结局额的,所以长个记性记录下,但其实它的原因并不复杂。

这个错误的产生,主要是因为在MySQL数据库版本为5.7及以上时,默认开启了ONLY_FULL_GROUP_BY SQL模式。在这个模式下,对于GROUP BY操作有严格的要求:SELECT语句中的查询列,如果不在GROUP BY子句中出现,那么这个查询就是非法的。这是因为,非聚合列在GROUP BY操作中没有明确的值,所以MySQL无法确定如何对这些列进行分组。

为了解决这个问题,我们可以采取以下两种方法:

第一种方法

在MySQL的配置文件中进行设置。对于Linux系统,我们需要编辑【/etc/my.cnf】文件,在[mysqld]配置中添加或修改sql_mode字段。

对于Windows系统,我们需要编辑MySQL安装目录下的【my.ini】文件,同样在[mysqld]配置中添加或修改sql_mode字段。

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_mode字段后,如图:

记录MySQL报错1055:ONLY_FULL_GROUP_BY模式下的GROUP BY查询问题及解决方法

我们需要保存文件并重启MySQL服务,以使设置生效。

第二种方法

在Navicat中,输入下列SQL语句进行查询:

SELECT @@GLOBAL.sql_mode;

查询结果如下,类似如下:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 ONLY_FULL_GROUP_BY,重新设置值。

命令如下:

set @@global.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语句之后,再次执行报错的SQL语句,发现可以正常运行了。

记录MySQL报错1055:ONLY_FULL_GROUP_BY模式下的GROUP BY查询问题及解决方法

另外树下,修改之后一定一定需要重启mysql才能使其生效。好了,修改完成项目运行一切正常,有问题留言反馈,对于不属于sql域名的直接在文件里添加然后重启mysql就行,不然出错就不好弄了,还要记得备份啊!

文章声明:以上内容(如有图片或视频亦包括在内)除非注明,否则均为网站名称原创文章,转载或复制请以超链接形式并注明出处。https://xz.itlaoli.com/blog/830.html

« 上一篇
下一篇 »

相关推荐

想搭Halo博客?MySQL和PostgreSQL怎么选?看完这篇就懂了

2025年09月02日

6824阅读

告别局域网限制,cpolar 内网穿透+宝塔面板,公网远程访问超简单

2025年08月26日

3793阅读

windows修改服务器远程桌面端口图文教程

2025年08月04日

3676阅读

为什么本地 HTML、JS、JSON 文件会出现跨域问题?

2025年07月18日

4254阅读

搭建自己的技术博客有什么意义?

2025年07月03日

4172阅读

解决Zblog文章中Emoji表情显示为问号的问题​

2025年06月30日

3910阅读

发表评论

访客 访客
评论列表 (暂无评论,3879人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码