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

MySQL 所有字段類型默認長度/存儲大小完整速查表

     編輯:MySQL 綜合教學

MySQL 字段類型存儲大小與默認長度完整速查表

精準掌握每種類型的存儲開銷,是表設計、容量規劃、性能優化的基礎。本文匯總數值、字串、日期、二進制、枚舉/集合全類型存儲計算公式與實際案例。

數值類型 (固定長度)

類型存儲 (字節)備註
TINYINT1
SMALLINT2
MEDIUMINT3
INT / INTEGER4
BIGINT8
FLOAT4單精度
DOUBLE / DOUBLE PRECISION / REAL8雙精度
DECIMAL(M,D) / NUMERIC(M,D)≈ (M+2)/2 字節每 4 位數字 2 字節,整數/小數部分分別計算
BIT(M)≈ (M+7)/8 字節

日期時間類型 (固定長度,5.6.4+ 支持微秒)

類型存儲 (字節)範圍精度
DATE31000-01-01 ~ 9999-12-31天
TIME3 + (fsp>0?1:0)-838:59:59 ~ 838:59:59秒/微秒
DATETIME5 + (fsp>0?1:0)1000-01-01 ~ 9999-12-31秒/微秒
TIMESTAMP4 + (fsp>0?1:0)1970-01-01 ~ 2038-01-19秒/微秒
YEAR11901 ~ 2155年

fsp = fractional seconds precision (0-6),微秒精度每增加 1 位約需 1 字節 (實際按 4 位一組存儲)。

字串類型 (變長,含長度前綴)

類型最大長度存儲計算長度前綴適用場景
CHAR(M)255 字符M × w 字節 (w=字符集最大字節數)無 (定長)固定長度代碼 (MD5、UUID、ISO 代碼)
VARCHAR(M)65,535 字符 (行限制)L × w + 1/2 字節1 字節 (L<256) / 2 字節 (L≥256)變長文本 (名稱、郵箱、地址)
TINYTEXT / TINYBLOB255 (2^8-1)L + 1 字節1 字節極短文本/二進制
TEXT / BLOB65,535 (2^16-1)L + 2 字節2 字節短文本/圖片/文檔
MEDIUMTEXT / MEDIUMBLOB16,777,215 (2^24-1)L + 3 字節3 字節中等文本/二進制
LONGTEXT / LONGBLOB4,294,967,295 (2^32-1)L + 4 字節4 字節長文本/大文件
  • L = 實際存儲字符數/字節數,w = 字符集最大字節數 (utf8mb4=4, utf8=3, latin1=1)。
  • VARCHAR(255) 用 1 字節前綴,VARCHAR(256) 用 2 字節,**建議不超過 255** 除非必要。
  • CHAR 定長補空格存儲,VARCHAR 不補空格。**CHAR 適合極短固定長度 (如 CHAR(32) 存 MD5)**。
  • TEXT/BLOB 家族不支持 DEFAULT 值 (8.0 前),索引需指定前綴長度。

枚舉與集合 (內部存儲為整數)

類型成員上限存儲 (字節)說明
ENUM('v1','v2',...)65,5351 (≤255 個) / 2 (>255)內部映射為 1,2,3... 緊湊高效
SET('v1','v2',...)641/2/3/4/8 (取決於成員數)位掩碼存儲,支持多選

ENUM 陷阱:數值上下文會返回索引數字而非字符串;ORDER BY enum_col 按索引序而非字母序;修改成員需 ALTER TABLE 重建表。

JSON 類型 (5.7+)

  • 存儲:類似 LONGTEXT (L + 4 字節) + 解析後的二進制樹結構 (佔額外空間)。
  • 優勢:文檔驗證、路徑索引 (JSON_EXTRACT 虛擬列索引)、部分更新 (JSON_SET)。

行大小限制與實際存儲估算

  • InnoDB 行數據 (不含 BLOB/TEXT 溢出頁) **最大約 8KB** (半頁 16KB/2)。
  • VARCHAR/TEXT/BLOB 超過 768 字節會移至溢出頁,主記錄只存 20 字節指針。
  • 估算表大小:行數 × (固定長度列總和 + 變長列平均長度 + 開銷 ~20-30B) × 1.2 (索引/碎片)。

快速查看表結構存儲信息

-- 查看欄位類型、長度、字符集
SHOW FULL COLUMNS FROM `table_name`;

-- 估算表大小 (MB)
SELECT 
  TABLE_NAME,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_mb,
  ROUND(DATA_LENGTH / 1024 / 1024, 2) AS data_mb,
  ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS idx_mb,
  TABLE_ROWS
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'db_name'
ORDER BY DATA_LENGTH DESC;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved