資料庫設計時,字串類型常被忽視。隨著儲存成本降低,開發者傾向「大而全」的 VARCHAR/TEXT,卻忽略了索引效能、儲存空間、字元集相容性的深層影響。本文系統梳理六大類型差異,建立正確選型觀念。
| 類型 | 長度特性 | 儲存方式 | 最大長度 | 適用場景 | 效能/空間權衡 |
|---|---|---|---|---|---|
| CHAR(n) | 定長 | 不足 n 字元以空格補齊,讀取需 TRIM | 255 字元 (8000 bytes) | 固定長度代碼:MD5、UUID、國家代碼、性別旗標 | 索引最快,空間浪費大 |
| VARCHAR(n) | 變長 | 實際長度 + 1~2 bytes 長度前綴 | 65,535 字元 (共享 64KB 上限) | 長度不固定、上限可預估:姓名、標題、URL | 空間效率高,索引稍慢 |
| TEXT | 變長 | 溢位頁儲存,需額外 I/O | 2^31-1 字元 (~2GB) | 長文章、JSON、日誌、大型文本 | 不支援預設值、索引需指定前綴長度 |
| NCHAR(n) | 定長 Unicode | 固定 2 bytes/字元 (UCS-2) | 4,000 字元 | 多語言固定長代碼 | 空間固定,無字元集轉換煩惱 |
| NVARCHAR(n) | 變長 Unicode | 2 bytes/字元 + 長度前綴 | 4,000 字元 | 多語言混雜、長度不定 | 統一 2 bytes,英文佔空間大 |
| NTEXT | 變長 Unicode | 同 TEXT,但雙字節 | 2^30-1 字元 | 多語言大文本 | 同 TEXT 限制 |
早期資料庫單字節字元集(Latin1/GBK)導致中英文混存亂碼。Unicode (UCS-2/UTF-16) 以固定 2 bytes 編碼所有字元解決相容性問題。
純英文/數字、固定長、高頻索引 → CHAR
純英文/數字、變長、空間敏感 → VARCHAR
含中文/多語言、固定長 → NCHAR
含中文/多語言、變長 → NVARCHAR
大文本、日誌、JSON → TEXT / NTEXT