记录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字段后,如图:
我们需要保存文件并重启MySQL服务,以使设置生效。
在Navicat中,输入下列SQL语句进行查询:
查询结果如下,类似如下:
通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 ONLY_FULL_GROUP_BY,重新设置值。
执行完上面的SQL语句之后,再次执行报错的SQL语句,发现可以正常运行了。
另外树下,修改之后一定一定需要重启mysql才能使其生效。好了,修改完成项目运行一切正常,有问题留言反馈,对于不属于sql域名的直接在文件里添加然后重启mysql就行,不然出错就不好弄了,还要记得备份啊!
Windows11下批量删除所有文件夹中的“.svn”文件夹的方法
记录下在Centos系统安装部署Maven项目管理和构建自动化工具的图文详情
参见
- 最高人民法院知识产权法庭搬迁信息化采购项目(二次)更正公告2026-10-30
- 第十八届(2026)中国国际社会公共安全产品博览会暨第三届智能与安全产业发展大会定档11月-2026年展会,北京安博会2026-10-30
- 通道式γ成像系统_2026-10-30
- 南通铭泰机床有限公司普通三辊卷板机|四辊卷板机|上辊万能式卷板机- 南通铭泰机床有限公司2026-10-30
- 行业新闻-浙江雷诺尔电气有限公司官网2026-10-30
- 德国国家科学与工程学院院士尤尔根·弗莱舍一行访温,开展产业考察与技术交流 | 展会新闻 | 2027浙江国际阀门产业链展览会 | 温州泵阀展 | 免费酒店住宿2026-10-30