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

SQL Server查询康熙部首异常:返回全量部首而非单条结果求助

问题原因与解决方案

核心原因

SQL Server的多数排序规则(包括你测试的默认规则和Japanese_Unicode_CI_AI_KS_WS)对**CJK Radicals Supplement Unicode区块(U+2E80至U+2EFF)**内的康熙部首字符,赋予了完全相同的排序权重。这就导致当你用=进行等值比较时,SQL Server会认为该区块内所有字符都是“相等”的,因此返回所有康熙部首记录。

而普通日文汉字(比如炎)属于CJK Unified Ideographs区块,每个字符都有独立的排序权重,所以能正常精确匹配单行结果。

验证方法

你可以通过以下查询验证权重等效性:

-- 对比两个不同康熙部首的等值判断
SELECT CASE WHEN N'⺉' COLLATE Japanese_Unicode_CI_AI_KS_WS = N'⺌' THEN '相等' ELSE '不等' END AS Result;
-- 查看字符的Unicode码点(确认是不同字符)
SELECT UNICODE(N'⺉') AS CodePoint1, UNICODE(N'⺌') AS CodePoint2;

执行后会发现,两个不同码点的康熙部首会被判定为“相等”。

解决方案

要实现康熙部首的精确匹配,需要使用二进制排序规则,这类规则会严格按照字符的Unicode码点进行比较,而非排序权重:

  1. 临时在查询中指定排序规则:
select *
from Kanji
where Character = N'⺉' COLLATE Unicode_BIN2;
  1. 长期方案:修改表列的排序规则(如果业务允许):
ALTER TABLE Kanji
ALTER COLUMN Character NVARCHAR(1) COLLATE Unicode_BIN2 NOT NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:14