解决mysql问题: this is incompatible with sql_mode=only_full_group_by

news2024/11/16 17:58:44

今天在部署一趟测试环境的服务,各种配置文件都配好了,启动服务后台报错,解决后记录一下,小伙伴们也可以看看!

### Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'storage.storage_category.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'storage.storage_category.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by] <----
org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'storage.storage_category.id' 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 URL [jar:file:/home/storage/storage_starter-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/mapper/StorageCategoryMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select         id, first_category, code, second_category, creator, updator, create_time, update_time, is_deleted         from storage.storage_category          WHERE  first_category = ?                          and is_deleted = 0                        group by second_category                             order by id

在网上也查了一些信息:

这个错误信息是由MySQL数据库返回的,它指出SQL查询中违反了ONLY_FULL_GROUP_BY SQL模式的要求。当MySQL启用了ONLY_FULL_GROUP_BY模式时,任何SELECT列表、HAVING条件或ORDER BY列表中的非聚合列都必须出现在GROUP BY子句中。如果它们不在GROUP BY子句中,且不是通过聚合函数(如SUM(), COUNT(), MAX(), MIN(), AVG()等)处理的,就会抛出这个错误。

错误信息中提到的storage.storage_category.id这一列没有被包含在GROUP BY子句中,同时也没有被聚合函数处理,因此违反了ONLY_FULL_GROUP_BY规则。

要解决这个问题,可以采取以下几种方法之一:

       1. 修改SQL查询:确保SELECT列表中的所有非聚合列都包含在GROUP BY子句中。例如,如果你的查询类似于这样:

SELECT storage_category.id, COUNT(*)  
FROM your_table  
GROUP BY some_other_column;

需要将storage_category.id也加入到GROUP BY子句中:

SELECT storage_category.id, COUNT(*)  
FROM your_table  
GROUP BY storage_category.id, some_other_column;

2. 关闭ONLY_FULL_GROUP_BY模式:如果你确定你的查询逻辑是正确的,并且不需要完全符合ONLY_FULL_GROUP_BY的要求,你可以关闭这个SQL模式。关闭该模式的方法是在MySQL配置文件中设置或者在运行时执行以下SQL命令:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

或者针对当前会话:

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

3.使用聚合函数:如果storage.storage_category.id列不需要单独列出每个唯一的值,而是可以通过聚合函数来汇总,比如取最小值或最大值,你可以修改查询来使用这些聚合函数。

SELECT MIN(storage_category.id) AS min_id, COUNT(*)  
FROM your_table  
GROUP BY some_other_column;

我在线上环境正常部署一切正常,所以我采用了第二种方式 关闭ONLY_FULL_GROUP_BY模式。

下面看看如何关闭ONLY_FULL_GROUP_BY模式?

  1. 找到MySQL的配置文件。在Linux系统中,配置文件通常位于/etc/mysql/my.cnf/etc/my.cnf。如果是其他操作系统,如Windows,配置文件的位置可能会有所不同。
  2. 使用文本编辑器打开配置文件。
  3. 在配置文件中找到[mysqld]部分。
  4. [mysqld]部分下添加或修改以下行,将sql_mode的值设置为不包含ONLY_FULL_GROUP_BY的模式。例如,可以设置为空字符串(禁用所有SQL模式)或指定其他你需要的SQL模式,但确保不包括ONLY_FULL_GROUP_BY

[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值,你需要将ONLY_FULL_GROUP_BY选项从其中移除,而不是简单地添加一个新的sql_mode行。

  1. 保存并关闭配置文件。
  2. 重启MySQL服务,使配置文件生效。在Linux系统中,可以使用以下命令重启MySQL服务:

sudo systemctl restart mysql 

请注意,关闭ONLY_FULL_GROUP_BY模式可能会导致一些查询结果不准确,因为在没有该模式的情况下,MySQL允许非聚合列出现在SELECT列表或HAVING条件中,即使它们没有包含在GROUP BY子句中。因此,在关闭该模式之前,请确保你了解可能的影响,并仔细考虑是否真的需要关闭它。如果只是为了临时解决某个查询问题,你也可以考虑使用SET命令在运行时临时禁用ONLY_FULL_GROUP_BY选项,而不是修改配置文件。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1538515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac nvm install failed python: not found

报错 $>./configure --prefix/Users/xxx/.nvm/versions/node/v12.22.12 < ./configure: line 3: exec: python: not found nvm: install v12.22.12 failed!解决方法 到 App 文件夹&#xff0c;并且打开 cd /System/Applications/Utilities/ open .记得改完 Rosetta 之…

Nginx 全局块配置 worker 进程的两个指令

1. 前言 熟悉 nginx 运行原理的都知道&#xff0c;nginx 服务启动后&#xff0c;会有一个 master 进程和多个 worker 进程&#xff0c;master 进程负责管理所有的 worker 进程&#xff0c;worker 进程负责处理和接收用户请求 在这里我们所要研究的是 master 进程一定要创建 wo…

java网络原理(三)----三次握手四次挥手

三次握手 三次握手是建立连接的过程&#xff0c;四次挥手是断开连接的过程&#xff0c;三次握手发生在socket.accept()之前。 客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手&#xff0c;这个过程建立完了后&#xff0c;连接就好了。 A和B…

【蓝桥杯嵌入式】四、各种外设驱动(九)ADC(1):软件触发与中断触发方式

温馨提示&#xff1a;本文不会重复之前提到的内容&#xff0c;如需查看&#xff0c;请参考附录 【蓝桥杯嵌入式】附录 目录 重点提炼&#xff1a; 一、需求分析 1、需要的外设资源分析&#xff1a; 2、外设具体分析&#xff1a; 比赛时ADC可能需要配置的部分&#xff1a;…

第十三届蓝桥杯物联网试题(省赛)

做后感悟&#xff1a; OLED显示函数需要一直显示&#xff0c;所以在主函数中要一直循环&#xff0c;为了确保这个检错功能error只输出一次&#xff0c;最好用中断串口进行接收数据&#xff0c;数据收完后自动进入中断函数中&#xff0c;做一次数据检查就好了&#xff0c;该开灯…

十三、MySQL基于GTID的半同步复制

目录 一、MySQL半同步复制 一、三种复制方式比较 1、异步复制 2、同步复制 3、半同步复制 4、半同步复制比较 5、半同步复制的特点 二、搭建半同步复制 1、如果不清楚Plugin的目录&#xff0c;用如下查找&#xff1a; 2、所有数据库服务器&#xff0c;安装半同步插件…

如何使用ospf (enps) 简单实践ospf协议

1. OSPF的基本概念 OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是一种广泛应用于TCP/IP网络中的内部网关协议&#xff08;Interior Gateway Protocol, IGP&#xff09;&#xff0c;主要用于在同一自治系统&#xff08;Autonomous Sys…

Django的forms组件

divmod(被除数, 除数)传入两个参数之后得到一个元组,元组中的第一个值是商,第二个是余数 forms组件 写一个注册功能,获取用户名和密码,利用form表单提交数据,在后端判断用户名和密码是否符合一定的条件:用户名必须超过3个字,密码最多6位.最后将验证信息返回到前端页面 1.手动…

【Algorithms 4】算法(第4版)学习笔记 21 - 5.2 单词查找树

文章目录 前言参考目录学习笔记0&#xff1a;前置介绍0&#xff1a;前置介绍1&#xff1a;单词查找树 R-way tries1.1&#xff1a;介绍1.2&#xff1a;查找操作1.2.1&#xff1a;成功命中1.2.2&#xff1a;未命中1.3&#xff1a;插入操作1.4&#xff1a;Java 实现1.5&#xff1…

刷题DAY31 | LeetCode 455-分发饼干 376-摆动序列 53-最大子序和

455 分发饼干&#xff08;easy&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并…

惠普EliteBook使用VirtualBox安装ISO镜像

实验环境 虚拟机软件&#xff1a;Oracle VM VirtualBox 6.1.16镜像文件&#xff1a;CentOS-7-x86_64-Minimal-2009.iso笔记本&#xff1a;惠普EditBook操作系统&#xff1a;Window10 BIOS开启虚拟化技术 一遍笔记本都不会开启虚拟化技术的&#xff0c;但是在window里使用虚拟…

二叉树|257.二叉树的所有路径

力扣题目链接 class Solution { private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中&#xff0c;中为什么写在这里&#xff0c;因为最后一个节点也要加入到path中 // 这才到了叶子节…

Qt实现TFTP Server和 TFTP Client(一)

1 概述 TFTP协议是基于UDP的简单文件传输协议&#xff0c;协议双方为Client和Server.Client和Server之间通过5种消息来传输文件,消息前两个字节Code是消息类型&#xff0c;消息内容随消息类型不同而不同。传输模式有三种&#xff1a;octet,netascii和mail&#xff0c;octet为二…

nodejs安装使用React

1、react安装 首先&#xff0c;确保电脑上具备nodejs环境&#xff0c;之后用 winr 呼出控制台&#xff0c;输入 cmd 命令弹出cmd控制台&#xff08;小黑框&#xff09;之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…

代码随想录--排序算法

912.排序数组 快速排序 思路&#xff1a; 1. 设置一个pivot2. 将小于nums[pivot]的值 放在左边3. 将 大于nums[pivot]的值 放在 右边4. 递归调用注意&#xff1a;必须先比较nums[high] 与pivot 代码&#xff1a; class Solution {int partition(vector<int>&nu…

论文解读:Frozen Feature Augmentation for Few-Shot Image Classification

文章总结 动机 通过各种图像增强手段和冻结特征(已经训练好的特征)结合起来训练轻量级模型。 最终得到的最佳设置顺序 亮度&#xff0c;对比度FroFA (C)和后置cFroFA (Pc) 这三种连续的数据增强操作(具体这三种数据增强操作是干了什么&#xff0c;得去附录找) 这里三种FroFA…

国内IP地址格式的多样性与规范化

在当今数字化时代&#xff0c;IP地址作为互联网通信的基本要素之一&#xff0c;在网络通信中扮演着至关重要的角色。了解国内IP地址的格式、规范以及不同类型的IP地址对网络通信的影响&#xff0c;对于构建高效稳定的网络环境至关重要。虎观代理小二将深入探讨国内IP地址的格式…

Centos虚拟机忘记密码;重置虚机密码

虚拟机是一个好用的工具&#xff0c;在本地搭建的虚拟机可以给我们提供测试&#xff0c;但时间长了也会忘记密码&#xff1b;因此这里以centos系统的虚机为例&#xff0c;提供一个重置虚机密码的方法 1.在开机页面按“E”进入编辑模式 进入后长这样&#xff1a; 2.找到ro cras…

iOS模拟器 Unable to boot the Simulator —— Ficow笔记

本文首发于 Ficow Shen’s Blog&#xff0c;原文地址&#xff1a; iOS模拟器 Unable to boot the Simulator —— Ficow笔记。 内容概览 前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱&#xff0c;问题也不少。&#x1f602; 那就有病治…

Tensorflow 2.0 常见函数用法(一)

文章目录 0. 基础用法1. tf.cast2. tf.keras.layers.Dense3. tf.variable_scope4. tf.squeeze5. tf.math.multiply 0. 基础用法 Tensorflow 的用法不定期更新遇到的一些用法&#xff0c;之前已经包含了基础用法参考这里 &#xff0c;具体包含如下图的方法&#xff1a; 本文介…