一、典型触发条件
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或以上版本,操作方法请参考 升级内核小版本。