😭this is incompatible with sql_mode=only_full_group_by , 差一点重装Mysql

起因

今天在线上数据库,同时帮忙统计查询一个sql,查询一下有多少人下了订单。心里想着,这不是很简单的吗?直接用用group by 不就解决了吗?就在我满心欢喜的写完sql,进行执行的时候,悲剧发生了,结果出现了this is incompatible with sql_mode=only_full_group_by

随后,在网上看了教程,就是找到修改my.ini文件,然后修改sql_mode,去掉only_full_group_by就行。

当我修改之后,重启mysql服务的时候,又出现mysql本地计算机上的MySQL服务启动后停止。想着,估计是端口占用了,把相关的服务都关掉了,Mysql还是启动不起来。还把修改的复原回去,还是启动不起来。

那边用户登录不上了,平台都炸锅了,问题都压到我这边了,一气之下,重启了服务器。结果还是不行,就差重装Mysql。差一点就出现事故了!

就在这时,大佬来了,给我说:"是不是编码不对,这个编码要是ANSI格式的才行"。我一看是utf-8的,赶紧修改成ANSI,然后重启Mysql服务,服务起来了,group by 也能查询了。在这里感谢大佬!!!
大佬主页,江湖人称 闹哥 ,喜欢的可以点个赞!!😄

来来来,一步一步走进这个问题,并解决,也给自己做个记录!!!

使用场景

在使用sql进行查询的时候,遇到数据库表中有重复数据的话,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句。

问题重现

问题

查询:select * from t_order group by user_id LIMIT 0, 1000

错误代码: 1055

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t_order.order_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

简单翻译一下

SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列"test.t_order.order_id",该列在功能上不依赖于GROUP BY子句的列;这与sqlmode=only_full_group_by不兼容

原因分析

原理层面

这个错误发生在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();
  1. 查询sql_mode select @@GLOBAL.sql_mode;

可以看出,在版本Mysql 8.0.35 中 sql_mode 开启了only_full_group_by 属性

解决方案

  1. 找到mysql安装目录,用记事本直接打开my.ini文件
  2. 编辑my.ini文件,修改sql_mode

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

  1. 修改my.ini文件编码为 ANSI很重要
  2. 重启Mysql服务

总结

一次小小问题会出现一系列结果。有好的,有坏的,有预想到的,也有预想不到的。好的是我们最希望的结果,坏的是我们所不想的,预想到的可以很快解决,预想不到的是需要大量时间来解决的。在面对问题的同时,还需要保持平常心去对待。

平时的工作学习中,还需要大量的思考、预判、总结。

加油吧,少年!!!

祝愿

愿世间永无BUG!!!😍

愿世间充满"爱码士"!!!😍 笑看人生,笑对生活!!!😆

相关推荐
HelloDam4 分钟前
基于元素小组的归并排序算法
后端·算法·排序算法
Net分享5 分钟前
在 ASP.NET Core 中使用 Confluent.Kafka 实现 Kafka 生产者和消费者
后端
HelloDam5 分钟前
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
后端
Winwoo7 分钟前
服务端推送 SSE
后端
THRUSTER1111140 分钟前
MySQL-- 函数(单行函数):数值函数, 字符串函数
数据库·mysql·函数·navicat·单行函数
橙序研工坊1 小时前
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
数据库·sql·mysql
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
uhakadotcom1 小时前
使用 Model Context Protocol (MCP) 构建 GitHub PR 审查服务器
后端·面试·github
Asthenia04121 小时前
详细分析:ConcurrentLinkedQueue
后端
uhakadotcom1 小时前
Ruff:Python 代码分析工具的新选择
后端·面试·github