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

SQL Server COLLATE 排序規則實作大小寫敏感/不敏感查詢

     編輯:關於SqlServer

資料庫安裝時未設定大小寫敏感,但特定查詢需區分大小寫,可在查詢層級使用 COLLATE 子句指定排序規則。

查詢層級指定排序規則


-- 區分大小寫 (CS = Case Sensitive)
SELECT * FROM table WHERE col = 'semye' COLLATE Chinese_PRC_CS_AI;

-- 不區分大小寫 (CI = Case Insensitive)
SELECT * FROM table WHERE col = 'semye' COLLATE Chinese_PRC_CI_AI;

排序規則名稱解析

以 Chinese_PRC_CI_AS 為例:

  • Chinese_PRC:Unicode 字符集,針對大陸簡體中文排序規則。
  • CI (Case Insensitive):不區分大小寫。對應 CS (Case Sensitive) 區分大小寫。
  • AS (Accent Sensitive):區分重音。對應 AI (Accent Insensitive) 不區分重音。
  • KI/KS:區分/不區分假名類型 (日文)。
  • WI/WS:區分/不區分全半形寬度。
  • BIN:二進位排序 (依碼位比較),效能最快但不符語言習慣。

定義層級套用

  • 資料庫層級:CREATE DATABASE ... COLLATE Chinese_PRC_CI_AS 或 ALTER DATABASE ... COLLATE ... (需單一用戶模式)。
  • 欄位層級:col_name VARCHAR(50) COLLATE Chinese_PRC_CS_AS NULL。
  • 運算式層級:如上查詢範例,僅影響該次比較/排序。

跨資料庫/跨欄位 JOIN 排序衝突解決

錯誤:「無法解決 equal to 作業的排序規則衝突」。


-- 於 JOIN 條件指定排序規則
SELECT * FROM db1.dbo.t1 a
INNER JOIN db2.dbo.t2 b ON a.name = b.name COLLATE Chinese_PRC_CI_AI_WS

或修改欄位預設排序規則使兩側一致。

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