| 函數 | 返回單位 | 多字節字符(如中文) | 適用場景 |
|---|---|---|---|
LENGTH(str) | 字節數 | UTF8 中文=3 字節,UTF8MB4=4 字節 | 存儲空間計算、網絡傳輸大小 |
CHAR_LENGTH(str) | 字符數 | 1 字符 = 1 | 業務邏輯長度校驗(用戶名/密碼/標題) |
CHARACTER_LENGTH(str) | 字符數 | 同 CHAR_LENGTH | 標準 SQL 別名,功能完全相同 |
BIT_LENGTH(str) | 位數 | 字節數 × 8 | 極少用,位運算場景 |
mysql> SELECT
LENGTH('你好') AS len_bytes,
CHAR_LENGTH('你好') AS len_chars,
BIT_LENGTH('你好') AS len_bits;
+-----------+-----------+----------+
| len_bytes | len_chars | len_bits |
+-----------+-----------+----------+
| 6 | 2 | 48 |
+-----------+-----------+----------+
-- UTF8: 每個中文 3 字節 = 24 位,兩字共 6 字節 = 48 位
-- 業務邏輯按「字符數」判斷,必須用 CHAR_LENGTH
SELECT * FROM admin WHERE CHAR_LENGTH(username) < 6;
-- 若誤用 LENGTH,UTF8 下「張三」(2字符) = 6字節,會被誤判為不滿足
| 字符集 | 中文字節數 | 英文/數字字節數 |
|---|---|---|
| latin1 | 不支援 | 1 |
| gbk | 2 | 1 |
| utf8 | 3 | 1 |
| utf8mb4 | 4 | 1 |
CHAR_LENGTH 在所有字符集下統一返回字符數,是跨字符集遷移的安全選擇。
存儲算 LENGTH,業務算 CHAR_LENGTH,標準寫 CHARACTER_LENGTH,BIT_LENGTH 幾乎不用。