萬盛學電腦網

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

MySQL LENGTH() 與 CHAR_LENGTH() 差異詳解:中文長度計算避坑指南

核心差異一覽

函數統計單位UTF-8 中文GBK 中文英數字元
LENGTH()位元組3 bytes2 bytes1 byte
CHAR_LENGTH()字元數1 char1 char1 char

常見應用場景

1. 查看字串位元組長度

SELECT LENGTH('www.111cn.net');  -- 回傳 15

2. 找出標題最長的 10 篇文章

SELECT id, title FROM article ORDER BY LENGTH(title) DESC LIMIT 10;

3. 篩選用戶名長度 < 6 字元的用戶

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() 計算實際佔用位元組
  • 跨資料庫遷移:Oracle LENGTH() 行為與 MySQL CHAR_LENGTH() 一致,遷移時須調整
  • PHP 端對應:mb_strlen($str, 'utf-8') 對應 CHAR_LENGTH(),strlen($str) 對應 LENGTH()

結語

記住口訣:LENGTH 看位元組,CHAR_LENGTH 看字元。中文環境下做長度驗證、截斷、排序,請務必用 CHAR_LENGTH(),避免 UTF-8 三位元組特性導致邏輯錯誤。

copyright © 萬盛學電腦網 all rights reserved