二進制 vs 非二進制
| 分類 | 型別 | 內容 | 字符集 | 比較排序 |
| 非二進制 | CHAR, VARCHAR, TEXT | 字符字串 | 可指定 | 按校對規則 |
| 二進制 | BINARY, VARBINARY, BLOB | 字節字串 | 無 | 按字節碼值 |
BINARY ≈ CHAR、VARBINARY ≈ VARCHAR、BLOB ≈ TEXT (對應關係)。
CHAR vs VARCHAR 核心差異
| 特性 | CHAR(M) | VARCHAR(M) |
| 長度 | 固定 M (0-255) | 可變 0-65535 |
| 儲存 | 右補空格至 M | 實際長度 + 1/2 字節 |
| 讀取 | 去尾空格 | 保留尾空格 (標準 SQL) |
| 適用 | 固定長、高頻 UPDATE | 不定長、節省空間 |
VARCHAR vs TEXT
- TEXT 不需指定 M,儲存 = 實際長度 + 2 字節。
- TEXT 不能有 DEFAULT 值 (8.0 前),不能全長度索引 (需前綴索引)。
- VARCHAR 5.0+ 最大 65535,可替代小型 TEXT。
型別儲存開銷速查
| 型別 | 最大長度 | 額外字節 |
| TINYTEXT / TINYBLOB | 255 | +1 |
| TEXT / BLOB | 64 KB | +2 |
| MEDIUMTEXT / MEDIUMBLOB | 16 MB | +3 |
| LONGTEXT / LONGBLOB | 4 GB | +4 |
選型決策樹
- 固定長度且高頻 UPDATE →
CHAR。
- 不定長、< 255 字元 →
VARCHAR。
- 大文本、文章內容 →
TEXT (按大小選 TINY/MEDIUM/LONG)。
- 二進制資料 (圖片、加密串) →
BLOB 系列。
- 需大小寫敏感比較 → 加
BINARY 屬性或 _bin 校對規則。