首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 大小寫敏感度設定完整指南:查詢層級、資料庫層級、伺服器層級與 Collation 解析

     編輯:關於SqlServer

三個層級的大小寫敏感度控制

1. 查詢層級:COLLATE 子句(最靈活、影響範圍最小)

-- 區分大小寫
SELECT * FROM table_a WHERE col = 'AbCdE' COLLATE Chinese_PRC_CS_AI;

-- 不區分大小寫
SELECT * FROM table_a WHERE col = 'abCdE' COLLATE Chinese_PRC_CI_AI;
  • 適用於單一查詢或特定比較操作。
  • 不影響資料庫或伺服器預設設定。
  • CS = Case Sensitive(區分大小寫),CI = Case Insensitive(不區分)。

2. 資料庫層級:ALTER DATABASE 變更預設 Collation

ALTER DATABASE testgrass COLLATE Chinese_PRC_CS_AI;
  • 影響資料庫內新建立資料表欄位的預設排序規則。
  • 現有資料表欄位不會自動變更,需逐一 ALTER TABLE ... ALTER COLUMN ... COLLATE ...。
  • 執行前需確保無其他連線使用該資料庫(單一使用者模式較安全)。

3. 伺服器層級:重建 master 資料庫(影響範圍最大)

-- 使用 Rebuildm.exe 重建 master 資料庫
-- 路徑範例:SQL Server\80\Tools\Binn\rebuildm.exe
  • 需離線操作,將重設所有系統/使用者資料庫的預設 Collation。
  • 極高風險:會刪除所有使用者資料庫,需先完整備份並準備還原腳本。
  • 通常僅在全新安裝或嚴重 Collation 衝突時考慮。

4. 欄位層級:建表或修改欄位時指定

-- 建表時指定
CREATE TABLE t1 (
  pwd NVARCHAR(10) COLLATE Chinese_PRC_CS_AS NULL
);

-- 修改既有欄位
ALTER TABLE t1 ALTER COLUMN pwd NVARCHAR(10) COLLATE Chinese_PRC_CS_AS;

Collation 名稱結構解析

範例:Chinese_PRC_CS_AI_WS

部分範例含義
字元集前綴Chinese_PRC_大陸簡體中文 Unicode 排序規則
後綴 _CI / _CS_CSCI = 不區分大小寫,CS = 區分大小寫
後綴 _AI / _AS_AIAI = 不區分重音,AS = 區分重音
後綴 _KI / _KS_KSKI = 不區分假名,KS = 區分假名(日文)
後綴 _WI / _WS_WSWI = 不區分全半形寬度,WS = 區分全半形寬度
後綴 _BIN_BIN二進位排序(最快,依碼位比較)

查詢所有支援的 Collation

SELECT * FROM ::fn_helpcollations();

實務決策指南

  1. 新專案:資料庫層級統一設定 Chinese_PRC_CI_AS(不區分大小寫、區分重音)或 Latin1_General_CI_AS,符合大多數中文應用習慣。
  2. 帳號/密碼/代碼欄位:欄位層級指定 CS(區分大小寫),如 pwd NVARCHAR(50) COLLATE Chinese_PRC_CS_AS。
  3. 跨資料庫/連結伺服器查詢:明確在 JOIN/WHERE 條件加上 COLLATE 避免 Collation 衝突錯誤:
    ON a.col COLLATE Chinese_PRC_CI_AS = b.col COLLATE Chinese_PRC_CI_AS
  4. 避免伺服器層級變更:除非全新部署,否則透過資料庫/欄位/查詢層級解決,風險最低。

SSMS 圖形介面設定

  1. 開啟資料表設計工具 → 選取目標欄位。
  2. 下方屬性面板找到「排序規則」 → 點選「...」彈出對話框。
  3. 勾選/取消勾選「區分大小寫」等選項 → 確定 → 儲存資料表。

正確理解與設定 Collation,能避免查詢結果不符預期、JOIN 失敗、索引無法使用等隱性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved