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

MySQL CHAR 與 VARCHAR 差異深度解析:儲存機制、效能與選型指南

     編輯:MySQL 資料庫相關知識

CHAR 固定長度、VARCHAR 變動長度,兩者在儲存空間、處理速度、尾部空格處理上有本質差異。本文透過實測數據與官方文件深度解析,提供儲存引擎層面的選型建議。

一、核心差異對照表

特性CHAR(4)VARCHAR(4)
長度特性固定 4 字元變動長度 (1-4 字元)
儲存空間固定 4 bytes實際長度 + 1 byte (長度前綴)
尾部空格自動補齊空格保留原始空格
讀取行為移除尾部空格保留尾部空格
超長截斷靜默截斷 (非嚴格模式)靜默截斷 (非嚴格模式)

二、實際儲存範例 (CHAR(4) vs VARCHAR(4))

輸入值CHAR 儲存CHAR 空間VARCHAR 儲存VARCHAR 空間
'' (空字串)' '4 bytes''1 byte
'ab''ab '4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefgh''abcd'4 bytes'abcd'5 bytes

三、尾部空格處理實測

CREATE TABLE test (a VARCHAR(4), b CHAR(4));
INSERT INTO test VALUES ('ab ', 'ab ');
SELECT CONCAT(a, '+'), CONCAT(b, '+') FROM test;
-- 結果: 'ab +' | 'ab+'

CHAR 讀取時自動移除尾部空格,VARCHAR 保留。

四、效能與選型建議

效能特性

  • CHAR: 固定長度利於索引查找、記憶體對齊,查詢速度較快,但浪費空間
  • VARCHAR: 節省空間,減少磁碟 I/O,但需額外 1-2 bytes 記錄長度,變長處理有微小 CPU 開銷

儲存引擎層面建議

  • MyISAM: 建議使用固定長度 CHAR,配合靜態資料列格式提升速度
  • InnoDB: 建議使用 VARCHAR,InnoDB 內部對變長欄位已優化,且節省空間減少 I/O

實務選型原則

  1. 長度固定 (身分證、手機號、MD5 雜湊) → CHAR / NCHAR
  2. 長度不固定 (地址、文章標題、描述) → VARCHAR / NVARCHAR
  3. 多語言系統 → 優先 NCHAR / NVARCHAR (Unicode) 避免編碼轉換問題
  4. 超過 255 字元 → VARCHAR 長度前綴佔 2 bytes,仍建議 VARCHAR

五、嚴格模式影響

啟用 STRICT_TRANS_TABLES 時,超長資料會報錯而非靜默截斷,生產環境建議開啟嚴格模式保障資料完整性。

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