Mysql8报错this is incompatible with sql_mode=only_full_group_by问题

 更新时间:2024年01月26日 16:02:20   作者:XL's妃妃  
这篇文章主要介绍了Mysql8报错this is incompatible with sql_mode=only_full_group_by问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、报错问题

1055 - 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

大致意思:

SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列的jsfwpt.o。

它在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

二、导致的原因

1、如果mysql是高版本,当执行group by时,select的字段不属于group by的字段的话,sql语句就会报错

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

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

三、检查是否是此原因

1、查看sql_mode

select @@GLOBAL.sql_mode;

2、执行结果:sql_mode开启了only_full_group_by 属性

四、解决办法

方法1、使用函数ANY_VALUE()

使用ANY_VALUE(<字段名>)将报错的字段包裹起来

  • MySQL有any_value(field)函数,它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝。
  • 这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。

方法2、临时修改sql_mode

方法2:仅用于临时去掉ONLY_FULL_GROUP_BY,重新设置值,重启mysql之后此方法就会失效

在已创建的数据库中执行:

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

修改mysql全局的sql_mode执行:

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

方法3、永久修改sql_mode

通过修改mysql配置文件my.ini解决

windows系统MySQL8永久修改sql_mode的方式

1、在MySQL安装的目录所在的分区根目录下,“查看“——勾选显示“隐藏的项目”,

2、my.ini的路径:ProgramData\MySQL\MySQL Server 8.0

3、打开my.ini文件

在[mysqld]下面找sql-mode,修改为如下内容:(没有sql-mode就追加在[mysqld]下面)

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

4、重启mysql

liunx上的修改方式

1、文件路径一般在:/etc/my.cnf,/etc/mysql/my.cnf

2、my.ini的具体修改方法略:与windows上一样

五、验证

sql_mode已经没有only_full_group_by 属性了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql实现merge into问题

    mysql实现merge into问题

    文章介绍了在数据库操作中,如何使用`REPLACE INTO`和`INSERT INTO ON DUPLICATE KEY UPDATE`语句进行数据更新和插入操作,如果不想创建唯一性索引,可以通过存储过程实现,文章通过实验和验证,展示了这两种方法的实际效果
    2024-12-12
  • Linux系统中MySQL的常用操作命令

    Linux系统中MySQL的常用操作命令

    本文给大家汇总介绍了下载Linux系统中操作mysql的一些常用的命令,非常实用,有需要的小伙伴可以参考下
    2018-02-02
  • 详细介绍mysql中limit与offset的用法

    详细介绍mysql中limit与offset的用法

    mysql查询使用select命令,配合limit,offset参数可以读取指定范围的记录,下面这篇文章主要给大家介绍了关于mysql中limit与offset用法的相关资料,需要的朋友可以参考下
    2022-05-05
  • 为什么MySQL数据库索引选择使用B+树?

    为什么MySQL数据库索引选择使用B+树?

    今天小编就为大家分享一篇关于为什么MySQL数据库索引选择使用B+树?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mysql二进制日志文件恢复数据库

    mysql二进制日志文件恢复数据库

    喜欢的在服务器或者数据库上直接操作的兄弟们你值得收藏下!不然你就悲剧了。-----(当然我也是在网上搜索的资料!不过自己测试通过了的!)
    2014-08-08
  • 解决MySQL innoDB间隙锁产生的死锁问题

    解决MySQL innoDB间隙锁产生的死锁问题

    线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码分析,问题还原的方式去排查问题,本文给大家介绍了如何解决MySQL innoDB间隙锁产生的死锁问题
    2023-10-10
  • 美团网技术团队分享的MySQL索引及慢查询优化教程

    美团网技术团队分享的MySQL索引及慢查询优化教程

    这篇文章主要介绍了美团网技术团队分享的MySQL索引及慢查询优化教程,结合了实际的磁盘IO情况对一些优化方案作出了分析,十分推荐!需要的朋友可以参考下
    2015-11-11
  • Linux下安装MySQL教程

    Linux下安装MySQL教程

    上一篇文章详细介绍windows下MySQL安装教程,这篇就从最基本的安装MySQL-Linux环境开始,文章为绕MySQL安装展开内容,需要的朋友可以参考一下
    2021-11-11
  • MySQL分区表和分桶表的操作详解

    MySQL分区表和分桶表的操作详解

    这篇文章主要介绍了MySQL分区表和分桶表的操作,分区表和分桶表都是数据库中的表,用于对数据进行分区或分桶存储,以提高数据库的性能和查询效率,需要详细了解可以参考下文
    2023-05-05
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    连接MySql速度慢的解决方法(skip-name-resolve)

    这篇文章主要介绍了连接MySql速度慢的解决方法(skip-name-resolve),需要的朋友可以参考下
    2015-09-09

最新评论