irpas技术客

解决Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not i

大大的周 4394

一、前言


? 在用Docker部署项目时,下载了一个mysql5.7版本的,而原项目使用的是5.6的mysql,这就导致出现了这个问题。把报的错误翻译后是:SELECT列表不在GROUP BY语句内且存在不函数依赖GROUP BY语句的非聚合字段’****’,这是和sql_mode=only_full_group_by不兼容的(即不支持)。这是一种严谨的SQL模式,规定SELECT、HAVING、ORDER后的非聚合字段必须和GROUP BY后的字段保持完全一致,具体什么意思看参考链接第一个,写的不错。

二、解决方法:

首先查看mysql是否启用ONLY_FULL_GROUP_BY

show VARIABLES LIKE 'sql_mode'; # 也可以在数据库的performance_schema --> variables_by_thread --> sql_mode中找到

如果查询出来有ONLY_FULL_GROUP_BY,则关闭

我这里是Docker下的mysql5.7版本,配置文件在/etc/mysql/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

my.cnf修改后的内容:

[mysqld] user=mysql character-set-server=utf8 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_connections=1000 [client] default-character-set=utf8 [mysql] default-character-set=utf8 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ # 在Docker如果没有映射路径的话,可以编辑好cp过去 docker cp my.cnf mysql5.7:/etc/mysql/my.cnf

最后保存配置,重新启动mysql即可

其他问题或者不同版本的mysql可查看下面参考链接

参考链接:

? https://zhuanlan.zhihu.com/p/368440685

? https://blog.csdn.net/Seven_0110/article/details/112356269

? https://blog.csdn.net/weixin_42514777/article/details/113894635


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #解决Cause #Expression #1 #of #select #list #is