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

SQL Server 字元型別完全解析:char/varchar/nchar/nvarchar 差異與選型指南

     編輯:關於SqlServer

三大核心差異

維度char / ncharvarchar / nvarchar
長度特性固定長度,不足右補空格變動長度,實際儲存多少佔多少
Unicode 支援char/varchar:非 Unicode(1 byte 英文,2 bytes 中文)
nchar/nvarchar:Unicode(統一 2 bytes)
同左
最大容量char/varchar:8000 英文 / 4000 中文
nchar/nvarchar:4000 字元(不分中英)
同左

實測驗證腳本

CREATE TABLE TempTable(
    id INT PRIMARY KEY,
    charField CHAR(10),
    varcharField VARCHAR(10),
    nvarcharField NVARCHAR(10)
);

INSERT INTO TempTable VALUES(1,'WFTH','WFTH','WFTH');
INSERT INTO TempTable VALUES(2,'無風聽海','無風聽海','無風聽海');
INSERT INTO TempTable VALUES(3,'','','');
INSERT INTO TempTable(id) VALUES(4);
INSERT INTO TempTable VALUES(5,'1234567890','1234567890','12345');

-- 查詢實際位元組長度
SELECT DATALENGTH(charField) AS charLen,
       DATALENGTH(varcharField) AS varcharLen,
       DATALENGTH(nvarcharField) AS nvarcharLen
FROM TempTable WHERE id = 1;  -- 英文短字串
-- id=2 中文、id=3 空字串、id=4 NULL、id=5 超長截斷

結果解讀

DATALENGTH 實測結果
  • id=1 英文:char=10(補空格)、varchar=4、nvarchar=8(Unicode 雙倍)
  • id=2 中文:char=10(4中文+2空格)、varchar=8、nvarchar=8
  • id=3 空字串:char=10、varchar=0、nvarchar=0
  • id=4 NULL:三者皆 NULL
  • id=5 超長:char/varchar 截斷為 10、nvarchar 截斷為 5 字元(10 bytes)

選型建議

  1. 固定長度代碼(身分證、國碼、貨幣代碼)→ char
  2. 中英混雜、長度不定(姓名、地址、備註)→ nvarchar
  3. 純 ASCII、長度可變(Email、URL、JSON 片段)→ varchar
  4. 避免 nchar 除非極少數固定長度 Unicode 場景

效能提示

  • char 比較需注意尾端空格語義(SET ANSI_PADDING 影響)
  • nvarchar 索引佔用空間約為 varchar 2 倍,大表慎用
  • 參數化查詢時型別不匹配會導致隱性轉換,殺死索引 Seek
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved