首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 字符串長度函數詳解:CHAR_LENGTH 與 LENGTH 的差異

     編輯:MySQL 綜合教學

前言

在 MySQL 資料庫操作中,計算字符串長度是常見需求。MySQL 提供了多種長度計算函數,其中最常用的是 LENGTH() 和 CHAR_LENGTH()。這兩個函數的計算方式截然不同,理解它們的差異對於正確處理多位元組字符(如中文)至關重要。

核心函數對比

LENGTH(str) - 位元組長度

LENGTH() 返回字符串佔用的位元組數。在 UTF-8 編碼下:

  • 一個英文字母或數字佔 1 個位元組
  • 一個中文字符佔 3 個位元組

例如:包含 5 個雙位元組字符的字符串,LENGTH() 返回 10。

CHAR_LENGTH(str) - 字符長度

CHAR_LENGTH() 返回字符串的字符數,不管字符是單位元組還是多位元組,每個字符都計為 1。

  • 一個英文字母計 1 個字符
  • 一個中文字符也計 1 個字符

同樣的例子:包含 5 個雙位元組字符的字符串,CHAR_LENGTH() 返回 5。

CHARACTER_LENGTH(str)

CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同義詞,功能完全相同。

BIT_LENGTH(str)

返回字符串的二進制位長度(位元組數 × 8)。

實際應用範例

查詢用戶名長度小於 6 個字符的用戶

SELECT * FROM admin WHERE CHAR_LENGTH(username) < 6;

注意:這裡使用 CHAR_LENGTH 而非 LENGTH,因為業務邏輯通常關心「字符數」而非「位元組數」。

快速總結表

函數計算單位中文處理適用場景
LENGTH位元組1 個中文 = 3 位元組 (UTF-8)存儲空間計算、網絡傳輸
CHAR_LENGTH字符1 個中文 = 1 字符業務邏輯驗證、顯示長度限制
BIT_LENGTH位1 個中文 = 24 位底層存儲分析

最佳實踐建議

  1. 表單驗證:限制用戶輸入長度時,使用 CHAR_LENGTH
  2. 存儲規劃:評估表空間大小時,參考 LENGTH
  3. 編碼一致性:確保資料庫、表、連接編碼統一為 UTF-8(或 utf8mb4)

掌握這些函數的差異,能幫助你避免因字符長度計算錯誤導致的數據截斷、驗證失效等問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved