解决“java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list,references column”

在一次跑项目的时候,报了这个错。

分析原因:

百度发现是Mysql5.7及以上版本默认将 sql_mode 的 ONLY_FULL_GROUP_BY 模式设置为打开状态

解决办法:

1、将数据库换回5.6及以下版本

2、将数据库中的 ONLY_FULL_GROUP_BY 模式去掉

使用如下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,将它去掉即可,使用如下sql:

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

很多资料说,这个解决办法重启数据库之后就失效了,目前为止,我重启很多次电脑了,并没有失效。

3、在my.ini文件中加上对应配置重启可彻底解决

就是在[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

但我不知道是不是缺了那个步骤,我加了这个配置之后重启数据库一直失败,重装了数据库服务再加上这个配置还是重启不了,将这个配置注释掉就重启成功了。

=============================================================================================

后面发现“=”后面的值需要加上’'(网上的资料很多都没有加),加上了之后才能重启成功

最后的配置是这个样子的

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

这是配置加入的位置,别加错地方了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/studio_1/article/details/128197317
今日推荐