当前位置: 首页 > news >正文

mysql从5.7升级到8.0后ONLY_FULL_GROUP_BY是升级后应用报错的第一大原因

mysql从5.7升级到8.0之后GROUP BY 行为变化最常见——ONLY_FULL_GROUP_BY 是升级后应用报错的第一大原因。啥意思你提到的这句话是 MySQL 从5.7 升级到 8.0后开发者最常遇到的兼容性问题之一。我们来一步步解释清楚 一、核心概念ONLY_FULL_GROUP_BY是什么ONLY_FULL_GROUP_BY是 MySQL 中sql_modeSQL 模式的一个选项它控制着GROUP BY语句的严格程度。✅开启时默认在 5.7 和 8.0要求SELECT列表中的每一个非聚合字段都必须出现在GROUP BY子句中。❌关闭时如 MySQL 5.6 默认允许SELECT中包含未在GROUP BY中出现的字段即使它们不是聚合函数MySQL 会“随便选一行”的值返回——这其实不符合 SQL 标准结果可能不可预测。 这个模式是为了让 MySQL 更符合SQL-92 标准。 二、为什么升级后会报错假设你有一张表CREATETABLEorders(idINT,user_idINT,productVARCHAR(50),amountDECIMAL(10,2));在 MySQL 5.6或关闭 ONLY_FULL_GROUP_BY 时以下 SQL 是允许的SELECTuser_id,product,SUM(amount)FROMordersGROUPBYuser_id;✅ 虽然product没有出现在GROUP BY中也没有用聚合函数如MAX()但 MySQL 5.6 会“容忍”它返回每个用户分组中某一条记录的 product 值不确定是哪条。但在 MySQL 5.7 / 8.0默认开启 ONLY_FULL_GROUP_BY执行上面的 SQL 会直接报错ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column orders.product which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by❌ 错误意思product字段既不在GROUP BY中又不是聚合函数如SUM,MAX所以不被允许 三、如何解决✅ 方法 1改写 SQL推荐让查询符合标准-- 方案 A把 product 加入 GROUP BYSELECTuser_id,product,SUM(amount)FROMordersGROUPBYuser_id,product;-- 方案 B对 product 使用聚合函数SELECTuser_id,MAX(product)ASproduct,SUM(amount)FROMordersGROUPBYuser_id;✅ 这是最安全、可移植、逻辑清晰的做法。⚠️ 方法 2关闭 ONLY_FULL_GROUP_BY不推荐临时关闭仅当前会话SETSESSIONsql_modeSTRICT_TRANS_TABLES,NO_ZERO_DATE,...;-- 去掉 ONLY_FULL_GROUP_BY永久关闭修改配置文件my.cnf[mysqld] sql_mode STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION❌ 风险可能导致查询结果不一致、隐藏逻辑错误且违背 SQL 标准。 四、为什么说这是“升级后第一大报错原因”因为很多老项目尤其 PHP、Java 应用在 MySQL 5.6 时代写了大量“宽松”的GROUP BY语句升级到 5.7/8.0 后默认开启了严格模式应用突然大面积报错开发者一脸懵必须逐条检查并修正 SQL或临时关闭该模式。✅ 总结项目说明问题本质MySQL 5.7 默认启用ONLY_FULL_GROUP_BY强制GROUP BY符合 SQL 标准典型错误SELECT中有非聚合字段未出现在GROUP BY中正确做法改写 SQL要么加入GROUP BY要么用聚合函数包裹临时绕过修改sql_mode关闭该选项不推荐用于生产最佳实践始终编写符合 SQL 标准的查询避免依赖 MySQL 的“宽松模式”这样无论升级到哪个版本都不会出问题。
http://www.zskr.cn/news/1359701.html

相关文章:

  • 3步解决魔兽争霸3在现代电脑上的三大兼容难题
  • 保山6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • myssh
  • 企业级应用通过Taotoken实现AI能力冗余与故障转移设计
  • ACS770还能打吗?最近测试了一款国产霍尔电流传感器
  • 硬核根基,智能载体:华清远见嵌入式“硬件+仿真+课程+师资”产教融合与实践教学方案
  • RAG-重排序策略
  • 【AI营销】为什么你的网站内容再好,AI也只引用其中一页?
  • 阿里云ACP云计算| 20人团考全员通过,恭喜!
  • 【限时解密】Lindy自动化方案未公开的4层权限熔断机制:为什么92%的企业跳过这步就触发合规雷区?
  • 3种实战方法搞定Docker镜像加速:从零到精通完全指南
  • Taotoken的Token Plan套餐如何帮助初创团队控制AI成本
  • 5款必备Illustrator脚本:让你的设计效率提升300%
  • 回收福禄克Fluke 5730A多功能校准器
  • AI Agent写诉状=执业风险?司法部新规生效倒计时30天,这4类文书必须人工复核
  • 如何快速找到互作基因?酵母筛库破解互作奥秘
  • Poppler Windows版:终极PDF处理方案,3分钟零配置部署指南
  • 如何通过NVIDIA Profile Inspector深度优化游戏性能:解锁显卡隐藏设置的完整指南
  • 防城港6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 别只看页面:盲盒源码小程序V6MAX系统与盲盒app源码程序解析 - 壹软科技
  • 个人报告6:学习资料上传与可配置解释来源
  • Flutter_01 工具准备1
  • 2026年全国青少年信息素养大赛初赛真题(算法应用主题赛C++小学组初赛真题2:文末附答案和解析)
  • 2026年全国青少年信息素养大赛初赛真题(算法应用主题赛C++小学组初赛真题1:文末附答案和解析)
  • DeepSeek-R1 在 CANN 上的推理部署
  • 最新论文降重工具横向测评|新手零踩雷选择指南
  • 钦州6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • RimSort终极指南:3步解决环世界MOD加载顺序混乱的完整方案
  • 股票低开必读:5条黄金口诀,教你反手掌握主动权
  • 从开题到定稿零返工:okbiye 毕业论文 AI 写作,把格式和内容难题都解决了