引言
今天正在部署开源项目的时候,小猿正常的完成了程序导入,数据库安装、以及各项配置均正常,整个项目也能正常启动运行,但是当我访问系统时就出现了一个莫名其妙的问题
问题描述
查看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
再次启动项目就发现没有任何错误。