中文環境下最易踩坑的點:**一個漢字在 UTF8MB4 佔 3~4 字節,但在業務邏輯中通常視為 1 個字符**。
| 函數 | 回傳單位 | 中文處理 | 英文/數字 | 別名 |
|---|---|---|---|---|
LENGTH(str) | 字節數 | 3~4 字節 | 1 字節 | — |
CHAR_LENGTH(str) | 字符數 | 1 字符 | 1 字符 | CHARACTER_LENGTH() |
BIT_LENGTH(str) | 二進制位數 | 24~32 位 | 8 位 | — |
-- 假設欄位含 5 個雙字節字符(如 GBK 環境)
SELECT LENGTH(str), CHAR_LENGTH(str);
-- 結果:10, 5
-- 業務要求:用戶名至少 6 個字符(中英不限)
SELECT * FROM admin WHERE CHAR_LENGTH(username) < 6;
-- 若用 LENGTH(),英文用戶需 6 字節,中文用戶需 18 字節,邏輯不一致
CHAR_LENGTH()LENGTH()LENGTH() = CHAR_LENGTH() * 1~4,具體視字符集而定