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

MySQL CHAR vs VARCHAR 選型指南:MyISAM vs InnoDB 儲存引擎差異

     編輯:MySQL 資料庫相關知識

核心結論

引擎建議理由
MyISAM優先 CHAR固定長度列,避免更新產生碎片,查詢速度快;缺點佔空間
InnoDB優先 VARCHAR內部儲存格式不區分固定/可變長,VARCHAR 省空間、減 I/O,反而更有利

深度解析

MyISAM:固定長度優勢

  • 列位移可直接計算,無需解析長度資訊 → 讀取快
  • 頻繁 UPDATE 可變長欄位會導致列遷移、碎片化 → 效能劣化
  • 適用:長度穩定、頻繁更新的欄位 (如 MD5 hash、代碼、旗標)

InnoDB:可變長度無罰則

  • 所有列共用表頭指標區,可變長資料另存溢位頁,固定長也一樣走指標
  • CHAR(n) 實際佔用 n * charset_max_bytes,VARCHAR(n) 僅佔實際長度 + 1-2 位元組長度前綴
  • 結論:InnoDB 下 VARCHAR 通常優於 CHAR

最佳實務建議

  1. MyISAM 表:短固定碼 (ISO 代碼、狀態、Hash) 用 CHAR;長文本、變動大用 VARCHAR
  2. InnoDB 表:預設用 VARCHAR,極短固定長 (如 CHAR(1) 旗標) 可用 CHAR
  3. 避免 CHAR(255) 等大固定長,嚴重浪費空間與快取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved