MySQL LENGTH() 函數對中文長度的計算取決於字元編碼,不同編碼下同一個漢字長度不同。本文整理各編碼、各資料庫的計算規則對照,並說明 CHAR_LENGTH() 的差異。
| 資料庫 | 編碼 | LENGTH(漢字) | LENGTH(字母/數字) | CHAR_LENGTH(任意字元) |
|---|---|---|---|---|
| MySQL | UTF-8 | 3 | 1 | 1 |
| GBK | 2 | 1 | ||
| Oracle | UTF-8 | 3 | 1 | 1 |
| GBK | 1 | 1 |
LENGTH() * 8)-- 查看字串位元組長度
SELECT LENGTH('要查看的字串');
-- 依字串長度排序
SELECT * FROM `table` ORDER BY LENGTH(name) ASC;
-- 查詢字元數(推薦用於中文斷詞、截斷)
SELECT CHAR_LENGTH('漢字'); -- 回傳 2
SELECT LENGTH('漢字'); -- UTF-8 回傳 6,GBK 回傳 4
// PHP 取得 UTF-8 字串字元數
mb_strlen($str, 'utf8');
// 取得位元組長度
strlen($str);
CHAR_LENGTH()VARCHAR(100) 是指字元數,但實際儲存大小看編碼)用 LENGTH()