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

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

相关产品
云数据库 MySQL 产品页,含版本规格、价格与购买入口。

一、典型触发条件

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或以上版本,操作方法请参考 升级内核小版本。

赞 (0)
上一篇 4天前
下一篇 4天前