| 函數 | 統計單位 | UTF-8 中文 | GBK 中文 | 英數字元 |
|---|---|---|---|---|
LENGTH() | 位元組 | 3 bytes | 2 bytes | 1 byte |
CHAR_LENGTH() | 字元數 | 1 char | 1 char | 1 char |
SELECT LENGTH('www.111cn.net'); -- 回傳 15
SELECT id, title FROM article ORDER BY LENGTH(title) DESC LIMIT 10;
SELECT * FROM user WHERE CHAR_LENGTH(username) < 6;
注意:此處用 CHAR_LENGTH() 才符合「字元數」語意;若用 LENGTH(),中文用戶名會被誤判。
-- UTF-8 環境
SELECT LENGTH('中'), CHAR_LENGTH('中'); -- 3, 1
-- GBK 環境
SELECT LENGTH('中'), CHAR_LENGTH('中'); -- 2, 1
CHAR_LENGTH() = CHARACTER_LENGTH()(同義詞)BIT_LENGTH() = LENGTH() * 8(位元數)OCTET_LENGTH() = LENGTH()(位元組數同義詞)CHAR_LENGTH()(如用戶名 6-20 字元)LENGTH() 計算實際佔用位元組LENGTH() 行為與 MySQL CHAR_LENGTH() 一致,遷移時須調整mb_strlen($str, 'utf-8') 對應 CHAR_LENGTH(),strlen($str) 對應 LENGTH()記住口訣:LENGTH 看位元組,CHAR_LENGTH 看字元。中文環境下做長度驗證、截斷、排序,請務必用 CHAR_LENGTH(),避免 UTF-8 三位元組特性導致邏輯錯誤。