MySQL错误-this is incompatible with sql_mode=only_full_group_by解决办法

2023-05-16


原因分析:
一、原理层面
这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题:
mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

二、sql层面
在sql执行时,出现该原因,简单来说就是:
由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,会报错误…

验证是否此原因:

1.查询数据库版本的语句

SELECT VERSION();

可以看到,我这里数据库版本是:8.0.16,大于5.7.5了

2. 查看sql_mode的语句

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_mode开启了only_full_group_by 属性
解决方案:
解决方案一:使用函数ANY_VALUE()包含报错字段
将上述报错语句改成:

SELECT ANY_VALUE(ID),USER_ID,ANY_VALUE(problems),ANY_VALUE(last_updated_date) FROM  t_iov_help_feedback GROUP BY USER_ID;

可以看到,结果能正常查询了,根据需要自己改查询字段的别名就行。

ANY_VALUE()函数说明:

MySQL有any_value(field)函数,它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝。
这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。
any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。
官方有介绍,地址:https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

解决方案二:通过sql语句暂时性修改sql_mode
去掉ONLY_FULL_GROUP_BY,重新设置值

SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据库下执行:

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

 

这里sql_mode不能设置NO_AUTO_CREATE_USER这个值,那直接去掉这个值就行

解决方案三:通过配置文件永久修改sql_mode
mysql安装在服务器上和安装在本地,修改配置文件的方式有点区别。

1、Linux下修改配置文件
1)登录进入MySQL
使用命令 mysql -u username -p 进行登陆,然后输入密码,输入SQL:

show variables like ‘%sql_mode’;
 

2)编辑my.cnf文件
文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf
使用vim命令编辑文件,不知道vim命令怎么使用的,可以参考我的另外篇文章:Linux中使用vi工具进行文本编辑
找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY
然后重启MySQL;
有的my.cnf中可能没有sql-mode,需要追加:

sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1
注意要加入到[mysqld]下面,如加入到其他地方,重启后也不生效,具体的如下图:
3)修改成功后重启MySQL服务

service mysql restart

重启好后,再登录mysql,输入SQL:show variables like ‘%sql_mode’; 如果没有ONLY_FULL_GROUP_BY,就说明已经成功了。

如果还不行,那么只保留STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 即可
追加内容为:

sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL错误-this is incompatible with sql_mode=only_full_group_by解决办法 的相关文章

  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • 用更轻的解决方案替换完整的 ORM(JPA/Hibernate):推荐的加载/保存模式?

    我正在开发一个新的 Java Web 应用程序 并且正在探索保存数据的新方法 对我来说是新方法 我主要有 JPA 和 Hibernate 的经验 但是 除了简单的情况之外 我认为这种完整的 ORM 可能会变得相当复杂 另外 我不太喜欢和他们
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 为表中的每个组选择前 N 行

    我面临一个非常常见的问题 即 为表中的每个组选择前 N 行 考虑一个表id name hair colour score列 我想要一个结果集 对于每种头发颜色 都能得到前 3 名得分手的名字 为了解决这个问题 我得到了我所需要的Rick O
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 自加入表

    我有一张像这样的桌子 Employee name salary a 10000 b 20000 c 5000 d 40000 我想获取所有工资高于A工资的员工 我不想使用任何嵌套或子查询 在采访中被问及并暗示是使用自连接 我真的不知道如何实
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 将表数据从一个 SQL Server 导出到另一台 SQL Server

    我有两个 SQL Server 都是 2005 版本 我想将多个表从一个表迁移到另一个表 我努力了 在源服务器上 我右键单击数据库 选择Tasks Generate scripts 问题是在下面Table View options没有Scr
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 如何使用 LAMBDA 表达式在 LINQ 中执行 IN 或 CONTAINS?

    我有以下 Transact Sql 我正在尝试将其转换为 LINQ 并且很挣扎 SELECT FROM Project WHERE Project ProjectId IN SELECT ProjectId FROM ProjectMemb
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation

随机推荐

  • JAVA小白工具人PHPer

    PHP写多了 xff0c 确实很松散 xff0c 什么都是array xff0c 不像java这么资深 xff0c 个个都是大佬 慢慢学习 1 二维数组取某一列的值 php的写法 array column array 39 id 39 ja
  • 当大恒相机采集帧率没有达到理论帧率时

    当大恒相机采集帧率没有达到理论帧率时 xff0c 可设置最大带宽
  • iOS——UITabBarController

    一 UITabBarController简介 1 UITabBarController 对象可以保存多个 视图控制器 并进行切换 xff0c 并且底部还会有一个 工具栏 xff08 UITabBar xff09 xff0c 工具栏里会有多个
  • nomachine NX 远程连接相关问题

    由于xavier等硬件设备不支持x86指令集 xff0c 因此无法使用诸如teamviewer 向日葵 todesk等远程控制软件 这里我们使用nomachine软件实现远程访问 远程连接分以下两种情况 xff1a 局域网内远程连接和公网远
  • loki部署

    官方最佳示例 xff1a Best practices Grafana Loki documentation helm repo add loki https grafana github io loki charts helm repo
  • C++中的string与char数据类型以及路径字符串拼接以及写txt文件的问题

    作为一个计算机小白 xff0c 最近学习C 43 43 xff0c 这里做一个小记录 xff0c 欢迎各路大神共同交流 分割线 C 43 43 中string与char的区别 xff1a 在C 43 43 中 xff0c 字符串有两种 xf
  • 计蒜客救援问题 java

    救生船从大本营出发 xff0c 营救若干屋顶上的人回到大本营 xff0c 屋顶数目以及每个屋顶的坐标和人数都将由输入决定 xff0c 求出所有人都到达大本营并登陆所用的时间 在直角坐标系的原点是大本营 xff0c 救生船每次从大本营出发 x
  • 在keil中观察STM32产生的PWM 用示波器观察实质频率与仿真不符 是计算值的10倍(疑惑中。。。)

    第一步 xff1a 选择软件仿真 1 配置软件仿真 第二步 xff1a 进入仿真 xff0c 调用logicc analyer 观察波形 1 按仿真按键进入仿真界面 2 打开模拟 示波器 界面 3 设置观察端口 4 开始仿真 全速运行 5
  • 工厂模式——简单工厂、工厂方法、抽象工厂入门及总结

    背景 相信我们很多开发人员 xff0c 在平时的系统开发过程中 xff0c 都或多或少等接触过一些设计模式 比如java程序员必须会接触到的Spring类库 xff0c 它就综合运用了多种设计模式 xff0c 从而使源码更加抽象 xff0c
  • IDEA插件开发-学习

    IDEA插件资料其实挺少的 xff0c 可能我姿势不对 闲暇无事 xff0c 当作练手 这东西挺难调试的 xff0c 官方文档实在看不下去 xff0c 谷歌资料也挺少的 把下面这些东西复制进去可以当调试用了 Project project
  • 树莓派 通过opencv 调用csi摄像头

    树莓派使用csi摄像头 在设置里面打开摄像头 检测摄像头 安装opencv 读取图像测试 socket 网络传图测试 opencv多线程 取图测试 在设置里面打开摄像头 span class token function sudo span
  • Centos7.2下安装Pyspider

    本来一直使用的python3 X的 xff0c 之前一直弄的Python3 6 1 xff0c 不知道为啥 xff0c 搭建了好几次都没有成功 xff0c 不知道是什么地方的问题 xff0c 后面再找一下问题 还有就是在Windows上搭建
  • OFD版式文件的优势

    OFD版式文件的优势 OFD格式是我国自主可控的电子文件版式文档格式 在OFD格式产生之前 xff0c 电子文件存档格式并没有统一的国家或行业标准 xff0c 档案工作中普遍采用DOC WPS PPTX等流式文件格式 内容易更改 转移过程存
  • OFD是什么?

    OFD是什么 xff1f OFD格式文件介绍 OFD xff08 Open Fixed layout Document的简称 xff0c 意为开放版式文档 xff09 xff0c 是按照我国自主研发制定的版式文档格式标准 GB T 3319
  • ofd格式文件转换成pdf格式的方法

    ofd格式文件很多人还比较陌生 xff0c 很多人接收到文件都不知如何打开阅读 xff0c 把文件发给对方 xff0c 还需要对方安装个专门的阅读软件 xff0c 我们还有另一个办法 xff0c 就是将OFD文件转换为PDF格式文件 xff
  • 比较出名的导航类网站

    网址导航是把很多网站集合起来 xff0c 按照一定的条件进行分类的网站 网址导航方便网民快速找到自己需要的网站 xff0c 可以直接到需要的网站 xff0c 而不必记住各个网站的网址 现在的网址导航一般都提供自己常用的查询工具 xff0c
  • 使用NGINX作为HTTPS正向代理服务器

    简介 xff1a NGINX主要设计作为反向代理服务器 xff0c 但随着NGINX的发展 xff0c 它同样能作为正向代理的选项之一 正向代理本身并不复杂 xff0c 而如何代理加密的HTTPS流量是正向代理需要解决的主要问题 本文将介绍
  • 超级小的docker镜像

    超级小的docker镜像 xff0c 通过可用来做基础镜像或者测试使用 拉镜像尽量选择带有apline或slim标签的 xff0c 体积很小 alpine镜像官方地址 xff1a https hub docker com alpine 拉取
  • 16进制转Base64的实现原理及代码

    随着计算机技术的发展 xff0c 数据的存储和传输方式也在不断更新 xff0c 其中十六进制字符串和Base64编码是两种常见的数据表示方式 本文将介绍16进制字符串和Base64编码的原理 xff0c 并提供Java代码实现16进制字符串
  • MySQL错误-this is incompatible with sql_mode=only_full_group_by解决办法

    原因分析 xff1a 一 原理层面 这个错误发生在mysql 5 7 5 版本及以上版本会出现的问题 xff1a mysql 5 7 5版本以上默认的sql配置是 sql mode 61 ONLY FULL GROUP BY xff0c 这