| 特性 | varchar(n) | nvarchar(n) |
|---|---|---|
| 字元集 | 非 Unicode(依資料庫定序代碼頁) | Unicode (UTF-16) |
| 儲存單位 | 位元組 | 位元組(每字元 2 位元組) |
| 最大長度 n | 1 ~ 8,000 | 1 ~ 4,000 |
| 實際儲存大小 | 實際資料位元組數 + 2 位元組(長度前綴) | 字元數 × 2 位元組 + 2 位元組 |
| 適用場景 | 純 ASCII(英文、數字、符號) | 多國語言、中日韓文字、表情符號 |
假設欄位值分別為 我(中文)與 coffee(英文):
2×2 + 6 = 10 位元組(含長度前綴實際約 12 位元組)。8 × 2 = 16 位元組(含長度前綴約 18 位元組)。| 宣告 | 可存入字元數 | 說明 |
|---|---|---|
| varchar(4) | 4 個英文字母 或 2 個中文字 | 上限 4 位元組 |
| nvarchar(4) | 4 個中文字 或 4 個英文字母 | 上限 4 個字元(8 位元組) |
char、nchar。資料長度不足時自動以空白填補至指定長度。優點:索引效率高、更新不易產生頁分裂。缺點:浪費空間。varchar、nvarchar。實際儲存長度 = 資料長度 + 2 位元組長度前綴。不填補空白,節省空間。char/varchar):英文 1 位元組,中文 2 位元組(視定序)。混合儲存易產生編碼亂碼。nchar/nvarchar):所有字元統一 2 位元組(UTF-16),解決多語言相容問題。| 類型 | 最多英文字元 | 最多中文字元 |
|---|---|---|
| char / varchar | 8,000 | 4,000 |
| nchar / nvarchar | 4,000 | 4,000 |
charncharnvarchar(max) 或 varchar(max)(SQL Server 2005+ 取代 ntext/text)nvarchar,避免未來國際化改造成本。varchar 較節省純英文資料空間;nvarchar 固定雙倍位元組。char/nchar 索引較窄、搜尋較快,但僅在長度真正固定時有效。nvarchar 需處理 Unicode 排序規則,極高併發下 CPU 稍高,但現代硬體通常可忽略。nvarchar 傳輸量較大,若頻繁跨網路大量傳輸純英文資料,可評估 varchar。誤區:「
varchar(100)就佔 100 位元組。」
事實:只佔實際資料長度 + 2 位元組。
誤區:「nvarchar只能存中文。」
事實:nvarchar可存任意 Unicode 字元,包含英文、表情符號、特殊符號。
誤區:「text/ntext還在用。」
事實:已淘汰,請改用varchar(max)/nvarchar(max)。
現代應用系統建議預設採用 nvarchar,除非經過評估確定為純 ASCII 高流量欄位才改用 varchar。統一字元集能避免編碼轉換錯誤、簡化跨系統整合,長期維護成本最低。