| 維度 | char / nchar | varchar / 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 超長截斷
charnvarcharvarcharnchar 除非極少數固定長度 Unicode 場景char 比較需注意尾端空格語義(SET ANSI_PADDING 影響)nvarchar 索引佔用空間約為 varchar 2 倍,大表慎用