萬盛學電腦網

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

MySQL LENGTH 與 CHAR_LENGTH 函數差異完整解析

核心差異一覽

在 MySQL 中處理字串長度時,LENGTH() 與 CHAR_LENGTH()(或 CHARACTER_LENGTH())是兩個最常被混淆的函數。它們的根本區別在於計算單位:

  • LENGTH():返回字串的位元組數。對於多位元組字元集(如 UTF-8),一個漢字佔 3 位元組(utf8mb4 為 4 位元組),英文數字佔 1 位元組。
  • CHAR_LENGTH():返回字串的字元數。無論字元是漢字、英文、數字或表情符號,每個字元都計為 1。

實戰範例

場景 1:精確匹配英文長度

需求:查詢用戶名長度恰好為 3 個英文字元的記錄(排除 3 個漢字的情況)。

SELECT * FROM `user` WHERE LENGTH(`username`) = 3;

此時 abc 會被選中,但 張三(UTF-8 下 6 位元組)不會。

場景 2:按字元數分頁或篩選

需求:找出佔用 3 個字元位置的欄位,不分中英。

SELECT * FROM `user` WHERE CHAR_LENGTH(`username`) = 3;

abc、張三李、a1中 皆會被選中。

進階說明

LENGTH() 的結果取決於資料庫/表/欄位的字元集設定。若使用 utf8mb4,一個漢字佔 4 位元組;若為 gbk,則佔 2 位元組。因此跨字元集環境時,務必使用 CHAR_LENGTH() 進行邏輯判斷,避免因編碼變更導致業務邏輯錯誤。

快速測試

SELECT 
  '測試' AS str,
  LENGTH('測試') AS byte_len,
  CHAR_LENGTH('測試') AS char_len;

結果(UTF-8 環境):

strbyte_lenchar_len
測試62
copyright © 萬盛學電腦網 all rights reserved