项目出现SELECT list is not in GROUP BY clause and contains nonaggregated column时的解决方案

引言

今天正在部署开源项目的时候,小猿正常的完成了程序导入,数据库安装、以及各项配置均正常,整个项目也能正常启动运行,但是当我访问系统时就出现了一个莫名其妙的问题

问题描述

查看idea后台,系统提示的错误如下:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘wms.wm_to_down_goods.goods_name’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)

在这里插入图片描述
查看了网上的若干网上的内容,小猿参考了两片比较重要的博文:
https://blog.csdn.net/weixin_41991232/article/details/82803170
https://blog.csdn.net/newmemory/article/details/84964617
总结后确定问题的原因的是mysql 5.7.5之后版本默认启用了only_full_group_by SQL模式,所以MySQL会不识别选择列表、条件或顺序列表引用的查询 ,当jdbc发送一个GROUP BY语句时,则表示sql数据库识别group by时就会出现问题。

问题解决步骤

对于这个问题网上大概提出两种方式,一种是用sql语句来修改默认配置,另一种是直接修改mysql的配置文件。

sql语句修改默认配置

首先查询global.sql_mode,执行:

select @@global.sql_mode

结果如下
在这里插入图片描述
我们先在要做的就是关掉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’;

即可完成对mysql的全局sql模块的本次配置,但当再次启动sql时同会出现上述问题。

通过配置文件修改global.sql_mode配置

1.用xshell打开sql配置文件
打开sql所在的文件,小猿的数据库版本是sql 5.7
在这里插入图片描述
所以必须配置global.sql_mode
小猿的文件配置都放在my.cnf文件中
在这里插入图片描述
执行命令

vim my.cnf

开始修改,在文件的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

在这里插入图片描述
重新启动mysql执行命令

service restart mysql

在这里插入图片描述
再次启动项目就发现没有任何错误。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值