前綴_後綴,例如 Chinese_PRC_CI_AS_KS_WS
前綴:字符集與地區(Chinese_PRC_ = 大陸簡體 Unicode 排序)
後綴:比較行為旗標組合
| 後綴 | 全稱 | 行為 | 範例影響 |
|---|---|---|---|
| _CI | Case Insensitive | **不區分大小寫** | 'a' = 'A' |
| _CS | Case Sensitive | **區分大小寫** | 'a' ≠ 'A' |
| _AI | Accent Insensitive | **不區分重音/變音符號** | 'café' = 'cafe' |
| _AS | Accent Sensitive | **區分重音** | 'café' ≠ 'cafe' |
| _KI | Kana Insensitive | **不區分平/片假名**(日文) | 'ひらがな' = 'ヒラガナ' |
| _KS | Kana Sensitive | **區分平/片假名** | 'ひらがな' ≠ 'ヒラガナ' |
| _WI | Width Insensitive | **不區分全/半形寬度** | 'A' (全形) = 'A' (半形) |
| _WS | Width Sensitive | **區分全/半形寬度** | 'A' ≠ 'A' |
| _BIN | Binary | **二進位碼位比較**,最快、最嚴格 | 依 Unicode 碼位序,不考慮語言規則 |
| _BIN2 | Binary Code Point | 補充字元區正確比較(SQL 2008+) | 處理 Surrogate Pair 正確 |
| 排序規則 | 適用場景 |
|---|---|
Chinese_PRC_CI_AS | 大陸簡體預設:不區分大小寫、區分重音(拼音聲調視為重音) |
Chinese_PRC_CI_AI | 不區分聲調搜尋(如拼音輸入法) |
Chinese_PRC_CS_AS_KS_WS | 嚴格區分:大小寫、聲調、假名、全半形(精確匹配、密碼驗證) |
Latin1_General_CI_AS | 西歐語系預設 |
Japanese_CI_AS_KS_WS | 日文:區分假名與全半形 |
-- 錯誤:無法解決 equal to 操作的排序規則沖突
SELECT * FROM DB1.dbo.T1 a JOIN DB2.dbo.T2 b ON a.Name = b.Name;
-- 解決:在 JOIN 條件指定 COLLATE
SELECT * FROM DB1.dbo.T1 a JOIN DB2.dbo.T2 b
ON a.Name = b.Name COLLATE Chinese_PRC_CI_AS;
-- 或在建表時統一指定欄位排序規則
CREATE TABLE T (Name NVARCHAR(50) COLLATE Chinese_PRC_CI_AS);
-- 拼音排序
SELECT * FROM #t ORDER BY Name COLLATE Chinese_PRC_CS_AS_KS_WS;
-- 結果:阿、國、人、中
-- 筆劃排序
SELECT * FROM #t ORDER BY Name COLLATE Chinese_PRC_Stroke_CS_AS_KS_WS;
-- 結果:一、乙、二、十、三...
利用 Chinese_PRC_Stroke 排序規則下 Unicode 碼位順序與筆劃數對應關係,可建立對照表函數計算筆劃總數;同理用 Chinese_PRC_CS_AS_KS_WS 排序順序對應拼音首字母區間。詳細演算法見原文函數 fun_getbh、fun_getPY。
SELECT * FROM ::fn_helpcollations()
WHERE name LIKE '%Chinese%';
Chinese_PRC_CI_AS(相容性最好、不區分大小寫符合直覺)。Chinese_PRC_CS_AS_KS_WS 或 _BIN2(嚴格區分)。_AI 忽略聲調/重音。Latin1_General_100_CI_AS_SC(SQL 2008+ 版本,支援補充字元)。