我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql8 “this is incompatible with sql_mode=only_full_group_by“的解决办法。

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql8 “this is incompatible with sql_mode=only_full_group_by“的解决办法。

参考:https://blog.csdn.net/u012660464/article/details/113977173

一、报错问题

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认为非法的,会报错误…

三、检查是否是此原因

查看sql_mode

select @@GLOBAL.sql_mode;

执行结果: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解决

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

在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
在这里插入图片描述

2、liunx上的修改方式

文件路径一般在:/etc/my.cnf,/etc/mysql/my.cnf
2、my.ini的具体修改方法略:与windows上一样

五、验证

在这里插入图片描述
sql_mode已经没有only_full_group_by 属性了

来源地址:https://blog.csdn.net/qq_43427354/article/details/128462293

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql8 “this is incompatible with sql_mode=only_full_group_by“的解决办法。

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

MySQL8中“thisisincompatiblewithsql_mode=only_full_group_by”错误提示指在ONLY_FULL_GROUP_BY模式下,未对所有非聚合列进行分组。解决方法包括:修改sql_mode设置为兼容模式或调整查询,如对所有非聚合列分组或使用子查询隐式分组。
Mysql8报错this is incompatible with sql_mode=only_full_group_by问题
2024-04-02

MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法

目录这个就是错误截图出现原因: mysql的版本问题解决办法:两种第一种:修改MySQL的配置文件第二种方法:修改自己的sql总结这个就是错误截图出现原因: MySQL的版本问题MySQL 5.7.5以上版本,实现了对功能依赖的检测。如果
2023-02-17

MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法

mysql是高版本,当执行group by时,select的字段不属于group by的字段的话,sql语句就会报错,下面这篇文章主要给大家介绍了关于MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法,需要的朋友可以参考下
2023-02-17

编程热搜

目录