SQl的排序规则中,Chinese_PRC_Stroke_CS_AS_KS_WS啥含义?
Stroke代表啥?词源角度讲讲。另外,讲一下汉字简体的排序规则的所有情况
这个问题非常深入,涉及语言学、计算机国际化和SQL Server的命名规范。我们来逐一拆解。
一、Chinese_PRC_Stroke_CS_AS_KS_WS 含义拆解
完整分解
text
Chinese_PRC_Stroke_CS_AS_KS_WS │ │ │ │ │ │ │ │ │ │ │ └─ WS = Width-Sensitive(区分全角/半角) │ │ │ │ └───── KS = Kana-Sensitive(区分假名) │ │ │ └───────── AS = Accent-Sensitive(区分重音) │ │ └───────────── CS = Case-Sensitive(区分大小写) │ └─────────────────── Stroke = 笔画排序 └─────────────────────────── Chinese_PRC = 中华人民共和国简体中文
整体含义
“中华人民共和国简体中文,按笔画排序,区分大小写,区分重音,区分假名,区分全角/半角”
二、Stroke 词源角度深度拆解
词源树
text
古英语 strīcan(抚摸、划过去) ↓ 中古英语 strok(划、击打) ↓ 现代英语 stroke(一笔、一击、中风) ↓ 汉字书法 → stroke(笔画) ↓ 计算机排序 → Stroke Sorting(按笔画排序)
详细词源路径
阶段 | 词形 | 含义 | 演变逻辑 |
原始日耳曼语 | *strīkaną | 划、抚摸 | 手部动作 |
古英语(450-1150) | strīcan | 抚摸、划过 | 动作引申为“留下的痕迹” |
中古英语(1150-1500) | strok | 一击、一笔 | 从“划的动作”到“划的结果” |
现代英语(1500-今) | stroke | 一击、一笔、中风 | 多义化 |
书法/汉字领域 | stroke | 笔画 | 借用“一笔”的概念 |
计算机排序 | stroke order | 笔画顺序 | 按汉字笔画的数目和顺序排序 |
为什么用 Stroke 而不是 Bihua?
微软在命名时选择了英语词 Stroke,而不是汉语拼音 Bihua,原因:
国际化:SQL Server 是国际产品,面向全球开发者
标准化:Unicode 标准中就用
Stroke表示汉字笔画可读性:英语开发者能猜出大概意思
类比:
日文排序用
Kana(假名),而不是Kana本身也是英语化拼写韩文排序用
Korean_Wansung,而不是Hangeul
三、Stroke 在排序规则中的具体行为
按什么排?
Chinese_PRC_Stroke 按以下优先级排序:
| 优先级 | 规则 | 示例 |
|---|---|---|
| 1 | 按笔画数(少→多) | 一(1画) → 二(2画) → 三(3画) → 四(5画) |
| 2 | 笔画数相同,按笔顺(横竖撇捺折) | 十(2画) → 又(2画)?需要具体看笔顺规则 |
| 3 | 再相同,按Unicode码位 | 同笔画同笔顺的罕见字 |
实际示例
sql
-- 创建按笔画排序的列CREATE TABLE test_stroke (
word nvarchar(10) COLLATE Chinese_PRC_Stroke_CS_AS_KS_WS);INSERT INTO test_stroke VALUES ('一'), ('二'), ('三'), ('四'), ('五'), ('十'), ('又');SELECT * FROM test_stroke ORDER BY word;排序结果(大致):
| 汉字 | 笔画数 | 排序位置 |
|---|---|---|
| 一 | 1画 | 1 |
| 二 | 2画 | 2 |
| 十 | 2画 | 2(但可能在二之后,取决于笔顺) |
| 又 | 2画 | 2 |
| 三 | 3画 | 5 |
| 五 | 4画 | 6 |
| 四 | 5画 | 7 |
对比拼音排序(Chinese_PRC_CI_AS):
按拼音首字母:二(er) → 三(san) → 十(shi) → 四(si) → 五(wu) → 一(yi) → 又(you)
四、简体中文排序规则的所有情况
SQL Server 中简体中文相关的排序规则分为两大类:
分类总览
大类 | 子类 | 排序依据 | 代表名称 |
拼音排序 | 按拼音字母 | 读音 | Chinese_PRC_CI_AS |
笔画排序 | 按笔画数/笔顺 | 书写 | Chinese_PRC_Stroke_CI_AS |
完整列表(简体中文)
排序规则名称 | 排序方式 | 大小写 | 重音 | 假名 | 全角 |
Chinese_PRC_CI_AS | 拼音 | 不区分 | 区分 | 不适用 | 不适用 |
Chinese_PRC_CS_AS | 拼音 | 区分 | 区分 | 不适用 | 不适用 |
Chinese_PRC_BIN | 二进制 | 严格 | 严格 | 严格 | 严格 |
Chinese_PRC_BIN2 | 二进制码位 | 严格 | 严格 | 严格 | 严格 |
Chinese_PRC_Stroke_CI_AS | 笔画 | 不区分 | 区分 | 不适用 | 不适用 |
Chinese_PRC_Stroke_CS_AS | 笔画 | 区分 | 区分 | 不适用 | 不适用 |
简体中文没有的后缀(为什么?)
后缀 | 含义 | 简体中文是否有 | 原因 |
_KS | 区分假名 | ❌ 没有 | 假名是日文特有 |
_WS | 区分全角 | ❌ 通常没有 | 简体中文规则通常不区分,但可手动加 |
_KI | 不区分假名 | ❌ 没有 | 同上 |
_AI | 不区分重音 | ❌ 没有 | 简体中文基本没有重音符号 |
注意: 你问的 Chinese_PRC_Stroke_CS_AS_KS_WS 中出现了 _KS 和 _WS,这是技术上合法的组合,但实际使用中 _KS 对中文无意义(因为没有假名),_WS 可能有效果但极少用。
五、拼音排序 vs 笔画排序 对比
对比维度 | 拼音排序 | 笔画排序 |
排序依据 | 读音(拼音字母顺序) | 笔画数 + 笔顺 |
典型名称 | Chinese_PRC_CI_AS | Chinese_PRC_Stroke_CI_AS |
使用场景 | 字典、通讯录、搜索 | 书法、古籍整理、字库 |
用户预期 | 大多数人习惯 | 专业领域 |
性能 | 快 | 稍慢(笔画计算复杂) |
多音字问题 | 会有歧义 | 无歧义 |
多音字问题示例
拼音排序下,"重庆" 可能被排在 "chong" 还是 "zhong"?取决于系统词库。
笔画排序下,"重" 是 9 画,固定位置,无歧义。
六、如何查看所有简体中文排序规则
sql
-- 查看所有简体中文相关的排序规则SELECT * FROM ::fn_helpcollations()WHERE name LIKE 'Chinese_PRC%'ORDER BY name;
结果大致为:
| name | description |
|---|---|
| Chinese_PRC_BIN | Chinese-PRC, binary sort |
| Chinese_PRC_BIN2 | Chinese-PRC, binary code point |
| Chinese_PRC_CI_AS | Chinese-PRC, case-insensitive... |
| Chinese_PRC_CS_AS | Chinese-PRC, case-sensitive... |
| Chinese_PRC_Stroke_CI_AS | Chinese-PRC, stroke, case-insensitive... |
| Chinese_PRC_Stroke_CS_AS | Chinese-PRC, stroke, case-sensitive... |
七、总结
| 问题 | 答案 |
|---|---|
Stroke 词源 | 古英语 strīcan(划)→ 书法术语(一笔)→ 汉字笔画 |
| 为什么用 Stroke | 国际化命名,Unicode 标准用语 |
| 笔画排序规则 | 先按笔画数,再按笔顺,再按码位 |
| 简体中文排序大类 | 拼音排序(默认)、笔画排序(_Stroke)、二进制排序(_BIN) |
| 简体中文没有的后缀 | _KS(假名)、_AI(重音)等 |
一句话:Stroke 是从古英语“划一笔”演变来的词,在 SQL Server 里代表“按汉字笔画数排序”——这是给拼音排序之外的另一套中文排序逻辑,主要用于书法、字典等专业场景