mysql8.0 sql_mode与ONLY_FULL_GROUP_BY报错

如果你的项目出现如下类似的错误

Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column '字段名' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ### The error may exist in class path resource [xml文件路径] ### The error may involve 查询方法名 ### The error occurred while setting parameters

大概率是因为你的程序是在mysql5.7以下版本开发的,但是迁移到了更高版本的mysql运行,更高版本的mysql在分组时会要求分组的字段必须位于select 所查询的字段列表中,此时你有两种选择:

1.更改你的查询语句.

2.更改数据库的查询限制策略.

以Windows版本的mysql8.0为例,我们通过以下查询语句可以查询mysql的当前限制策略:

bash 复制代码
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

通过sql的方式替换掉ONLY_FULL_GROUP_BY字段并不见效

网络上大部分的建议是更改sql_mode,以下是示例

首先,找到mysql8.0 my.ini默认的配置文件路径,Windows在

C:\ProgramData\MySQL\MySQL Server 8.0\ 目录下,然后修改为如下配置

bash 复制代码
[mysqld]  
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

对于有些版本,重启后再次查询,发现ONLY_FULL_GROUP_BY限制已经去除,但有些版本还是无效的,原因在于,在一些新版本的Mysql里,数据库的限制策略关键字已经不叫sql_mode,而叫

sql-mode

此时,查看配置文件的大约120行左右,你会看到:

bash 复制代码
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连同后面的逗号去掉就可以了.

重启mysql,故障解决.

如果快速帮你定位并解决到了问题,记得点赞收藏哦.

相关推荐
Hgfdsaqwr28 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
砚边数影28 分钟前
InfluxDB迁移替换实战:金仓时序数据库如何提高写入性能
数据库·性能优化·时序数据库·kingbase·kingbasees·金仓数据库
eWidget7 小时前
InfluxDB迁移至金仓数据库的同城容灾实践:性能显著提升、运维效率优化,某能源企业实现RPO_5秒的高可靠时序数据管理
运维·数据库·能源·时序数据库·kingbase·kingbasees·金仓数据库
小句7 小时前
MySQL慢查询日志详细使用指南
数据库·mysql·adb
老邓计算机毕设8 小时前
SSM医疗资源普查6qxol(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb开发·医疗资源管理
dyyx1118 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
码农水水8 小时前
中国邮政Java面试被问:容器镜像的多阶段构建和优化
java·linux·开发语言·数据库·mysql·面试·php
曹牧8 小时前
Oracle:NULL
数据库·oracle
龙之叶9 小时前
【Android Monkey源码解析五】- 异常处理
android·数据库
马克学长10 小时前
SSM医院门诊管理系统u4pw5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb 开发·门诊管理