You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定utf8mb4_unicode_520_ci后,char类型CTE关联表为何出现排序规则冲突?

排序规则冲突原因解析
  • CAST生成的CHAR字符串继承会话默认排序规则:你执行CAST('apple' AS CHAR(255))时,生成的字符串排序规则并不会继承数据库的默认值(utf8mb4_unicode_520_ci),而是采用当前MySQL会话的默认排序规则。多数场景下会话默认是utf8mb4_general_ci(比如客户端连接默认配置、全局参数未修改),这就导致CTE中的字符串和test表字段的排序规则(utf8mb4_unicode_520_ci)不匹配,触发=操作的排序规则冲突报错。
  • 去掉表COLLATION子句的隐式兼容逻辑:不给表指定COLLATION时,表字段会继承数据库的排序规则,此时MySQL会自动对会话默认排序规则的字符串做隐式转换,使其匹配表的排序规则,因此不会报错。
  • NCHAR的规则匹配特性:MySQL中的NCHAR基于character_set_national配置的字符集,默认会继承数据库的字符集和排序规则。你创建的数据库默认是utf8mb4_unicode_520_ci,所以CAST('apple' AS NCHAR(255))生成的字符串排序规则和表完全一致,不会出现冲突。
可选解决方法
  • 显式指定CAST的排序规则:CAST('apple' AS CHAR(255) CHARACTER SET utf8mb4) COLLATE utf8mb4_unicode_520_ci
  • 修改会话默认排序规则:执行SET SESSION collation_connection = 'utf8mb4_unicode_520_ci';,让会话与数据库、表的排序规则保持一致

内容的提问来源于stack exchange,提问作者Manngo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:42:54