惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
S
Security Affairs
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Heimdal Security Blog
Forbes - Security
Forbes - Security
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Spread Privacy
Spread Privacy
C
Cybersecurity and Infrastructure Security Agency CISA
Latest news
Latest news
T
Tor Project blog
I
Intezer
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Project Zero
Project Zero
V2EX - 技术
V2EX - 技术
V
Vulnerabilities – Threatpost
L
Lohrmann on Cybersecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
T
Threat Research - Cisco Blogs
Webroot Blog
Webroot Blog
T
Threatpost
Help Net Security
Help Net Security
W
WeLiveSecurity
Know Your Adversary
Know Your Adversary
WordPress大学
WordPress大学
L
LINUX DO - 最新话题
月光博客
月光博客
PCI Perspectives
PCI Perspectives
小众软件
小众软件
爱范儿
爱范儿
博客园 - Franky
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
P
Privacy International News Feed
Y
Y Combinator Blog
P
Palo Alto Networks Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium

沉迷在 - Java.li - 无法自拔

Spring Boot启动报错 Failed to configure a DataSource 解决办法 Maven依赖冲突怎么排查?dependency:tree、exclusions与版本统一完整教程 - 沉迷在 - Java.li - 无法自拔 给网站加一条会动的人群横幅:Little People 动画组件 Demo - 沉迷在 - Java.li - 无法自拔 【soso.re】聚合热榜 | CloudflareWorkers部分接口失效的排查与代理方案 - 沉迷在 - Java.li - 无法自拔 Spring Boot 2升级到Spring Boot 3完整指南:JDK17、javax迁移jakarta、依赖兼容与常见报错 - 沉迷在 - Java.li - 无法自拔 随机小姐姐视频 - 沉迷在 - Java.li - 无法自拔 Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本? - 沉迷在 - Java.li - 无法自拔 No compiler is provided in this environment解决办法:JDK、JRE、Maven与IDEA排查 - 沉迷在 - Java.li - 无法自拔 置身钉内|含全文 PDF - 沉迷在 - Java.li - 无法自拔 javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查 Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法 Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查 JSON转Java实体类完整教程:对象、数组、嵌套结构与LocalDateTime处理 Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证 IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程 Java版本号与class文件major version对照表:Unsupported class file major version 52 / 55 / 61 / 65 / 69 / 70 Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速完整指南 Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源 Java开发者必备工具箱 2026年Java行情深度解读:就业真实现状、语言排名与开发者破局指南 如何防止服务器被暴力破解?2026年最全的5层防护实战指南 Go-RSS-Hub:我用 Go 搭了一个可扩展的 RSS 聚合服务 Vibe Coding 实战复盘 2026年全球十大顶级大语言模型横向对比报告 万能插座与十八般兵器:MCP 和 Skill 记一次处理服务器被暴力破解(含黑名单IP) Vibe Coding:一名“古法程序员”的使用反思与未来思考 .li后缀续费的特殊性(某些顶级域名在到期前可能被提前删除) 浅谈域名后缀以及市场前景 咖啡与编程 超越基础的编程智慧
解决MySQL ONLY_FULL_GROUP_BY 模式导致的 SQL 语法错误
HiF · 2026-03-11 · via 沉迷在 - Java.li - 无法自拔

报错信息

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''xxx.d.brand_id'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这是一个典型的 MySQL ONLY_FULL_GROUP_BY 模式导致的 SQL 语法错误。

原因分析

SQL 语句中使用了 GROUP BY d.source_detail_id,但是在 SELECT 列表中包含了其他非聚合列(如 d.brand_id, d.brand_name, d.unit_id 等),而这些列并没有出现在 GROUP BY 子句中。
在 MySQL 5.7+ 版本中,默认开启了 sql_mode=ONLY_FULL_GROUP_BY。该模式要求:SELECT 列表中的每一列,要么必须包含在 GROUP BY 子句中,要么必须使用聚合函数(如 SUM, MAX, MIN, ANY_VALUE 等)进行包裹。
数据库认为,如果你只按 source_detail_id 分组,那么对于同一个 source_detail_id,如果存在多行数据且它们的 brand_id 不同,数据库就无法确定应该返回哪一行的 brand_id,因此报错。

解决办法

  1. 修改 SQL,将所有非聚合字段加入 GROUP BY;
  2. 使用 ANY_VALUE() 函数包裹非聚合列(快速修复,无需改 GROUP BY);
    如果你确定同一个 source_detail_id 下这些属性值是唯一的,或者你不在乎取哪一行的值,可以使用 MySQL 的 ANY_VALUE() 函数。这告诉数据库:“随便取一个值给我,不要报错”。
  3. 关闭 ONLY_FULL_GROUP_BY 模式;
    # 临时生效
    SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    # 永久生效
    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    我使用的是云数据库,操作步骤是在云控制台,找到数据库实例,点击操作,选择修改参数,在参数列表中搜索 sql_mode,将 ONLY_FULL_GROUP_BY 改为空,提交参数后立即生效。

重要提示

虽然关闭 ONLY_FULL_GROUP_BY 可以快速解决你的报错,但请务必注意以下几点:

  1. 数据不确定性风险:
    关闭该模式后,MySQL 允许 SELECT 列表中出现在 GROUP BY 之外的非聚合列。如果这些列在分组后有多不同的值,MySQL 会随机返回其中一行的值。
  2. 主从同步/集群问题:
    如果你的架构包含只读实例(Read-only instances)或集群,确保所有节点的 sql_mode 配置一致,否则可能导致主从同步错误或查询结果不一致。