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

SQL Server 大小寫敏感設定完全指南:資料庫、資料行、函數三層面解決方案

     編輯:關於SqlServer

SQL Server 大小寫敏感度由定序 (Collation) 決定,可在資料庫、資料行、運算式三個層面設定。本文彙整三種常用做法,滿足不同場景需求。

方法一:修改定序 (永久生效)

-- 資料行層級
ALTER TABLE tb ALTER COLUMN colname NVARCHAR(100) COLLATE Chinese_PRC_CI_AS; -- 不區分大小寫
ALTER TABLE tb ALTER COLUMN colname NVARCHAR(100) COLLATE Chinese_PRC_CS_AS; -- 區分大小寫

-- 資料庫層級
ALTER DATABASE 資料庫名稱 COLLATE Chinese_PRC_CS_AS;

CI = Case Insensitive,CS = Case Sensitive。資料庫層級變更影響新建資料行預設定序,現有資料行需逐一 ALTER COLUMN。

方法二:自訂純量函數進行二進位比較 (臨時/特定查詢)

CREATE FUNCTION StrComp(@Str1 VARCHAR(50), @Str2 VARCHAR(50))
RETURNS INT
AS BEGIN
    DECLARE @i INT = 0, @y INT = 1, @iLen INT;
    SET @iLen = CASE WHEN LEN(LTRIM(RTRIM(@Str1))) < LEN(LTRIM(RTRIM(@Str2)))
                     THEN LEN(LTRIM(RTRIM(@Str2))) ELSE LEN(LTRIM(RTRIM(@Str1))) END;
    WHILE @i < @iLen
    BEGIN
        IF ASCII(SUBSTRING(@Str1, @i+1, 1)) = ASCII(SUBSTRING(@Str2, @i+1, 1))
            SET @i = @i + 1;
        ELSE BEGIN SET @y = 0; BREAK; END
    END
    RETURN @y;
END

用法:WHERE dbo.StrComp(Field1, 'aAbB') = 1。逐字元比較 ASCII 碼,效能較差,適合小資料量或特定業務邏輯。

方法三:查詢層級指定 COLLATE (單次查詢)

SELECT * FROM tb WHERE colname = 'abc' COLLATE Chinese_PRC_CS_AS; -- 區分大小寫比較
SELECT * FROM tb WHERE colname = 'abc' COLLATE Chinese_PRC_CI_AS; -- 不區分大小寫比較

不改變結構描述,靈活控制單一比較操作的敏感度。

選擇建議

  • 系統層級一致性需求 → 修改資料庫/資料行定序
  • 特定報表/邏輯需區分大小寫 → 查詢層級 COLLATE
  • 舊系統相容、無法變更結構描述 → 自訂函數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved