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

MySQL 字串函數完整參考指南(上):ASCII、BIN、CHAR、COMPRESS 等核心函數詳解

     編輯:MySQL 綜合教學

前言

字串處理是 SQL 開發高頻需求。MySQL 提供豐富的字串函數,涵蓋編碼轉換、長度計算、大小寫、子串擷取、比對、壓縮等。本文為系列第一部分,詳細說明 ASCII、BIN、BIT_LENGTH、CHAR、CHAR_LENGTH、COMPRESS 等核心函數語法、參數與實戰範例。

通用規則

  • 回傳結果長度超過 max_allowed_packet 時回傳 NULL。
  • 字串位置索引從 1 起算(非 0)。
  • 多位元組字符集下,LENGTH() 回傳位元組數,CHAR_LENGTH() 回傳字符數。

函數詳解

1. ASCII(str)

回傳字串最左字符的數值編碼(0~255)。空字串回傳 0,NULL 輸入回傳 NULL。

SELECT ASCII('2');   -- 50
SELECT ASCII('dx');  -- 100 (僅取 'd')

2. BIN(N)

回傳長整數 N 的二進位字串表示,等同 CONV(N,10,2)。

SELECT BIN(12);  -- '1100'

3. BIT_LENGTH(str)

回傳字串二進位長度(位元數)。

SELECT BIT_LENGTH('text');  -- 32 (4字元 × 8位元)

4. CHAR(N,... [USING charset])

將每個整數參數視為字符編碼,拼接成字串。NULL 參數被忽略。大於 255 的值自動拆分為多字符(如 CHAR(256) = CHAR(1,0))。

SELECT CHAR(77,121,83,81,76);  -- 'MySQL'
SELECT CHAR(77,77.3,'77.3');   -- 'MMM' (非整數截斷)

USING 子句:指定輸出字符集,否則回傳二進位字串。

SELECT CHARSET(CHAR(0x65));              -- binary
SELECT CHARSET(CHAR(0x65 USING utf8));   -- utf8

5. CHAR_LENGTH(str) / CHARACTER_LENGTH(str)

回傳字串字符數(非位元組數)。多位元組字符集下與 LENGTH() 不同。

-- 假設雙位元組字符集,5字元
SELECT LENGTH('漢字');       -- 10
SELECT CHAR_LENGTH('漢字');  -- 5

6. COMPRESS(string_to_compress)

壓縮字串,需 MySQL 編譯時連結 zlib。回傳二進位資料,格式:
空字串 → 空字串;
非空字串 → 4 位元組原始長度(Little-endian)+ 壓縮資料。
若原字串以空白結尾,自動附加 '.' 防止 CHAR/VARCHAR 截斷尾部空白(建議存入 BLOB)。

SELECT LENGTH(COMPRESS(REPEAT('a',1000)));  -- 21
SELECT LENGTH(COMPRESS(''));                -- 0
SELECT LENGTH(COMPRESS('a'));               -- 13
SELECT LENGTH(COMPRESS(REPEAT('a',16)));    -- 15

解壓請用 UNCOMPRESS()。

實務提醒

  • 壓縮資料請存 BLOB/VARBINARY,勿存 CHAR/VARCHAR(尾部空白截斷風險)。
  • CHAR() 產生二進位字串,若需特定字符集請加 USING。
  • 字串位置函數(SUBSTRING、LOCATE 等)索引從 1 起算,切勿混淆程式語言 0-based 習慣。

下一篇預告

下集將涵蓋 CONCAT、CONCAT_WS、ELT、FIELD、FIND_IN_SET、FORMAT、HEX、INSERT、INSTR、LCASE/LOWER、LEFT、LENGTH、LOAD_FILE、LOCATE、LPAD、LTRIM、MAKE_SET、MID、OCT、OCTET_LENGTH、ORD、POSITION、QUOTE、REPEAT、REPLACE、REVERSE、RIGHT、RPAD、RTRIM、SOUNDEX、SPACE、STRCMP、SUBSTRING、SUBSTRING_INDEX、TRIM、UCASE/UPPER、UNHEX 等函數。

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