文档中心>云数据库 MySQL>自研内核>内核问题检查与修复>窗口函数 Collation 聚合失败触发空指针解引用 Crash

窗口函数 Collation 聚合失败触发空指针解引用 Crash

最近更新时间:2026-07-02 09:59:29

我的收藏

问题

云数据库 MySQL 在处理窗口函数(Window Function)查询时,当 ORDER BY 子句中使用 CASE 表达式,且 CASE 表达式的不同分支返回具有不同 collation(字符集排序规则)的字段时,collation 聚合失败会触发空指针解引用,导致数据库实例 Crash。

问题触发场景

典型触发条件

1. 使用窗口函数:查询中包含 ROW_NUMBER()RANK()DENSE_RANK() 等窗口函数。
2. ORDER BY 包含 CASE 表达式:窗口函数的 ORDER BY 子句使用 CASE WHEN...END 表达式。
3. Collation 冲突:CASE 表达式的不同分支返回具有不同 collation 的字符串类型字段。

最小复现 SQL

CREATE TABLE t1 (
id INT PRIMARY KEY,
col_ci VARCHAR(100) COLLATE utf8mb4_general_ci,
col_cs VARCHAR(100) COLLATE utf8mb4_unicode_ci
);

SELECT id, ROW_NUMBER() OVER (
ORDER BY CASE WHEN id = 1 THEN col_ci ELSE col_cs END
) AS rn FROM t1;

涉及问题的内核版本

MySQL 8.0 20260430之前的版本。

修复的内核版本

MySQL 8.0 20260430及以上版本。

修复方法

升级到已修复版本
将内核版本升级至 MySQL 8.0 20260430或以上版本,操作方法请参考 升级内核小版本