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

SQL Server 2000:NVARCHAR vs VARCHAR 完整差異比較與選型指南

     編輯:關於SqlServer

定義比較

特性NVARCHAR(n)VARCHAR(n)
儲存編碼Unicode (UCS-2/UTF-16),雙位元組非 Unicode,單位元組 (視字碼頁)
字元範圍1 ~ 4,000 字元1 ~ 8,000 位元組
儲存大小實際字元數 × 2 位元組實際位元組長度(含雙位元組字元為 2 位元組)
支援語系全球所有語言(中、日、韓、表情符號等)僅支援指定字碼頁語系(預設中文環境為 CP936/CP950)
排序規則Unicode 排序規則字碼頁相依排序規則

核心差異解析

1. 儲存方式不同

  • NVARCHAR:按字元儲存,每字元固定 2 位元組(增補字元除外)。
  • VARCHAR:按位元組儲存,英文 1 位元組,中文 2 位元組(DBCS)。

2. 空間效率

純 ASCII/英文資料:VARCHAR 節省 50% 空間。
含中文/多語系:兩者相近,但 NVARCHAR 避免字碼頁轉換錯誤。

3. 亂碼風險

  • VARCHAR:跨字碼頁移轉(如簡體 CP936 → 繁體 CP950)極易產生亂碼。
  • NVARCHAR:Unicode 統一碼位,移轉零風險。

選型決策樹

  1. 系統需支援多國語言、或未來可能擴展? → NVARCHAR
  2. 僅存純英文/數字/代碼(如 ISO 代碼、URL、JSON 片段)? → VARCHAR 節省空間
  3. 既有資料庫已大量使用 VARCHAR 且無亂碼問題? → 維持現狀,新欄位視需求決定
  4. 索引鍵值長度接近 900 位元組限制? → VARCHAR 可存更多字元

實測範例


CREATE TABLE TestChar (
    Vcol VARCHAR(10),
    Ncol NVARCHAR(10)
);
INSERT INTO TestChar VALUES ('ABC', N'ABC');       -- 3 位元組 vs 6 位元組
INSERT INTO TestChar VALUES ('中文', N'中文');     -- 4 位元組 vs 4 位元組 (雙位元組字元)
INSERT INTO TestChar VALUES ('A中', N'A中');       -- 3 位元組 vs 6 位元組

SELECT 
    Vcol, DATALENGTH(Vcol) AS V_Bytes,
    Ncol, DATALENGTH(Ncol) AS N_Bytes
FROM TestChar;

遷移建議

SQL Server 2005+ 建議新專案預設使用 NVARCHAR(或 NVARCHAR(MAX)),儲存成本已非瓶頸,Unicode 相容性收益遠大於空間差異。舊系統若確定永不跨語系,可維持 VARCHAR。

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