MySQL报错sql_mode=only_full_group_by的问题解决

2025-02-08 04:50

本文主要是介绍MySQL报错sql_mode=only_full_group_by的问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非...

报错信息

DataGrip 报错还原

[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xx库.xx表.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

MySQL报错sql_mode=only_full_group_by的问题解决

Navicat 报错还原

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘school.student_100w.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

MySQL报错sql_mode=only_full_group_by的问题解决

报错原因

mysql 5.7后,MySQL的 SQL_MODE 配置项会默认包含 only_full_group_by 模式,这个配置会严格执行SQL92标准。如果代码中含有group by聚合操作,那么select中的列,除了使用聚合函数之外的,如max()、min()等,都必须出现在group by中http://www.chinasem.cn

要求:从学生表中,根据班级编号,分组查询班级编号、班级名称。

报错:SELECT 查询的字段和 GROUP BY 分组依据的字段不统一。

# SELECT 查询的字段和 GROUP BY 分组依据的字段不统一,会报错。
SELECT class_number, class_name FROM student GROUP BY class_number;

调整:将SELECT 查询的字段和 GROUP BY 分组依据的字段统一。

# SELECT 查询字段和 GROUP BY 分组依据的字段统一后就不会报错。
SELECT class_number, class_name FROM student GROUP BY class_number, class_name ;
# SELECT 查询字段和 GROUP BY 分组依据的字段统一后就不会报错。
SELECT class_number FROM student GROUP BY class_number;

解决方案

查看当前 sql mode

执行 SQL 语句,查看当前的 sql_mode 。

SELECT @@glojrFlcFAzbal.sql_mode;

注意默认的列宽可能无法直接查看全部内容,容易造成误解,需要手动拉伸列宽查看。

MySQL报错sql_mode=only_full_group_by的问题解决

拉伸列宽后可查看全部内容,(不同版本的 MySQL 默认值可能不同)。

MySQL报错sql_mode=only_full_group_by的问题解决

方案一:临时解决

排除当前 sql_mode 中 ONLY_FULLphp_GROUP_BY 值,复制剩下的值。执行设置语句:

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

但是如果当前数据库重启后,还是回归默认设置,即包含 ONLY_FULL_GROUP_BY 模式。

方案二:永久解决

Windows系统,直接修改 my.ini 配置文件。

MySQL报错sql_mode=only_full_group_by的问题解决

在 [mysqld] 模块下新增一行配置:

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTIhttp://www.chinasem.cnTUTION'

注意:

  • 不能有多余的符号,我之前在结尾加了分号导致重启失败。
  • 点击保存文件,不要直接关掉。 不然设置丢失,是不会生效的。

MySQL报错sql_mode=only_full_group_by的问题解决

linux系统,思路是一样的,都是找配置文件修改配置。但是不同Mysql版本,路径和配置文件名称可能不同:大致可能是 /etc/my.cnf 或者 /mysql.conf 之类的名称。

数据库重启后生效。

方案三:使用 any_value() 或 group_concat()

  • any_value():
    • 将分到同一组的数据里第一条数据的指定列值作为返回数据。 (any_value()函数就是MySQL提供的用来抑制ONLY_FULL_GROUP_BY值被拒绝的)
SELECT class_number, any_value(class_name) FROM student GROUP BY class_number;

实际使用效果如下:

MySQL报错sql_mode=only_full_group_by的问题解决

  • group_concat():
    • 将分到同一组的数据默认用逗号隔开作为返回数据。
SELECT class_number, group_concat(class_name) FROM student GROUP BY class_number;

实际使用效果如下:

MySQL报错sql_mode=only_full_group_by的问题解决

方案四:调整实现思路,避开 GROUP BY 使用

通过对SQL的查询思路调整,代码逻辑调整等,部分场景是可以绕开对js GROUP BY 关键字筛选依赖的。这个需要结合实际业务场景,自己去思考调整了。

到此这篇关于MySQL报错sql_mode=only_full_group_by的问题解决的文章就介绍到这了,更多相关MySQL sql_mode=only_full_group_by内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL报错sql_mode=only_full_group_by的问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153340

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是