在 MySQL 資料庫操作中,計算字符串長度是常見需求。MySQL 提供了多種長度計算函數,其中最常用的是 LENGTH() 和 CHAR_LENGTH()。這兩個函數的計算方式截然不同,理解它們的差異對於正確處理多位元組字符(如中文)至關重要。
LENGTH() 返回字符串佔用的位元組數。在 UTF-8 編碼下:
例如:包含 5 個雙位元組字符的字符串,LENGTH() 返回 10。
CHAR_LENGTH() 返回字符串的字符數,不管字符是單位元組還是多位元組,每個字符都計為 1。
同樣的例子:包含 5 個雙位元組字符的字符串,CHAR_LENGTH() 返回 5。
CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同義詞,功能完全相同。
返回字符串的二進制位長度(位元組數 × 8)。
SELECT * FROM admin WHERE CHAR_LENGTH(username) < 6;
注意:這裡使用 CHAR_LENGTH 而非 LENGTH,因為業務邏輯通常關心「字符數」而非「位元組數」。
| 函數 | 計算單位 | 中文處理 | 適用場景 |
|---|---|---|---|
| LENGTH | 位元組 | 1 個中文 = 3 位元組 (UTF-8) | 存儲空間計算、網絡傳輸 |
| CHAR_LENGTH | 字符 | 1 個中文 = 1 字符 | 業務邏輯驗證、顯示長度限制 |
| BIT_LENGTH | 位 | 1 個中文 = 24 位 | 底層存儲分析 |
CHAR_LENGTHLENGTH掌握這些函數的差異,能幫助你避免因字符長度計算錯誤導致的數據截斷、驗證失效等問題。