萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL LENGTH() 中文長度計算規則:UTF-8、GBK、Oracle 跨資料庫對照

MySQL LENGTH() 函數對中文長度的計算取決於字元編碼,不同編碼下同一個漢字長度不同。本文整理各編碼、各資料庫的計算規則對照,並說明 CHAR_LENGTH() 的差異。

核心結論速查表

資料庫編碼LENGTH(漢字)LENGTH(字母/數字)CHAR_LENGTH(任意字元)
MySQLUTF-8311
GBK21
OracleUTF-8311
GBK11

函數差異說明

  • LENGTH():計算位元組長度。UTF-8 下漢字佔 3 位元組,GBK 下佔 2 位元組,字母數字皆 1 位元組
  • CHAR_LENGTH() / CHARACTER_LENGTH():計算字元數。無論編碼、漢字或字母數字,皆計為 1
  • BIT_LENGTH():計算二進位位元長度(LENGTH() * 8)

常用查詢範例

-- 查看字串位元組長度
SELECT LENGTH('要查看的字串');

-- 依字串長度排序
SELECT * FROM `table` ORDER BY LENGTH(name) ASC;

-- 查詢字元數(推薦用於中文斷詞、截斷)
SELECT CHAR_LENGTH('漢字');  -- 回傳 2
SELECT LENGTH('漢字');       -- UTF-8 回傳 6,GBK 回傳 4

PHP 端對應處理

// PHP 取得 UTF-8 字串字元數
mb_strlen($str, 'utf8');

// 取得位元組長度
strlen($str);

實務建議

  1. 需按「字元數」處理(如截取前 10 字、驗證長度)請用 CHAR_LENGTH()
  2. 需按「儲存空間/位元組」計算(如欄位定義 VARCHAR(100) 是指字元數,但實際儲存大小看編碼)用 LENGTH()
  3. 資料庫編碼統一用 UTF-8(或 utf8mb4),避免跨系統編碼不一致導致長度計算混亂
copyright © 萬盛學電腦網 all rights reserved