这个错误是由于MySQL中字符集校对规则(Collation)不匹配导致的。具体来说,在比较或操作两个字段时,它们的Collation不一致(一个是utf8mb4_general_ci
,另一个是utf8mb4_0900_ai_ci
),导致无法直接进行比较。
解决方法
方法1:临时转换字段的Collation(推荐)
在查询时,使用COLLATE
关键字将其中一个字段的Collation转换为与另一个相同。例如,将user_name
转换为utf8mb4_0900_ai_ci
:
WITH temp_xh_ids (id) AS (
SELECT user_name
FROM sys_user
WHERE sflx_type = 1
AND create_time > '2025-09-01 00:00:00'
AND user_name COLLATE utf8mb4_0900_ai_ci LIKE '2025%' -- 转换Collation
AND ykt_bind_status = 1
)
方法2:修改表字段的Collation(永久解决)
直接修改表结构,统一字段的Collation(需谨慎,可能影响其他查询):
ALTER TABLE sys_user MODIFY user_name VARCHAR(255) COLLATE utf8mb4_0900_ai_ci;
或统一为utf8mb4_general_ci
:
ALTER TABLE sys_user MODIFY user_name VARCHAR(255) COLLATE utf8mb4_general_ci;
方法3:修改数据库/表默认Collation
如果整个表或数据库的Collation不统一,可以修改默认设置:
ALTER TABLE sys_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
建议
- 优先使用方法1(临时转换),避免直接修改表结构可能带来的风险。
- 检查表结构中相关字段的Collation是否一致:
SHOW FULL COLUMNS FROM sys_user;
- 确保后续建表时统一使用相同的字符集和校对规则(如
utf8mb4_0900_ai_ci
)。