首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 判斷欄位是否包含中文字符:LENGTH vs CHAR_LENGTH

     編輯:MySQL 資料庫相關知識

利用 LENGTH() 與 CHAR_LENGTH()(或 CHARACTER_LENGTH())的差異,即可快速判斷欄位是否含有多位元組字符(如中文、日文、韓文、Emoji)。

原理說明

  • LENGTH(str):回傳字串的位元組數。UTF-8 下一個中文佔 3 位元組(utf8mb4 下 4 位元組),英文/數字佔 1 位元組。
  • CHAR_LENGTH(str):回傳字串的字符數,不管中英皆計為 1。

若 LENGTH(col) = CHAR_LENGTH(col) → 純 ASCII(無中文);
若 LENGTH(col) > CHAR_LENGTH(col) → 含多位元組字符(有中文)。

實戰查詢:找出標題含中文的文章

SELECT *
FROM `t_ad`
WHERE `userid` = 974
  AND `deleteflag` = 1
  AND LENGTH(REPLACE(REPLACE(`title`, '-', ''), '+', '')) 
      > CHAR_LENGTH(REPLACE(REPLACE(`title`, '-', ''), '+', ''));

上面範例先移除 - 和 + 干擾字符,再比較兩個長度函數。

進階:精確計算中文字數

-- UTF-8 (3 bytes per Chinese char)
SELECT (LENGTH(col) - CHAR_LENGTH(col)) / 2 AS chinese_char_count
FROM `table`;

-- UTF8MB4 (4 bytes per Chinese char/Emoji)
SELECT (LENGTH(col) - CHAR_LENGTH(col)) / 3 AS chinese_char_count
FROM `table`;

適用場景

  • 資料清洗:篩選含特定語言的記錄。
  • 長度驗證:前端限制「20 個字符」,後端用 CHAR_LENGTH 校驗。
  • 避免截斷:VARCHAR(100) 存中文最多 33 個字(utf8),需按字符數而非位元組數設計。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved