預設安裝的 SQL Server 為不區分大小寫排序規則。若需在密碼驗證等場景進行嚴格大小寫比較,有以下兩種做法。
ALTER TABLE Users
ALTER COLUMN Password VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CS_AS; -- _CS = Case Sensitive
之後該欄位比較自動區分大小寫:
SELECT * FROM Users WHERE Password = 'BamBi2000'; -- 僅符合完全相同大小寫
將字串轉為 VARBINARY 再比較,利用位元層級差異達成區分大小寫:
DECLARE @input VARCHAR(50) = 'BamBi2000';
IF CAST(@input AS VARBINARY(50)) = CAST('BamBi2000' AS VARBINARY(50))
PRINT '密碼正確';
ELSE
PRINT '密碼錯誤';
SQL_Latin1_General_CP1_CS_AS (大小寫、重音敏感)Latin1_General_CS_AS (Windows 排序規則,同樣區分大小寫)命名規則:_CS = Case Sensitive (區分大小寫),_CI = Case Insensitive (不區分)。
SQL Server 2000 以上建議使用資料行排序規則,語意清晰且效能最佳;舊版本或跨版本相容專案可採用 CAST(... AS VARBINARY) 技巧。