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

MySQL 字段類型存儲大小完整速查表(整數、浮點、日期、字符串)

     編輯:MySQL 資料庫相關知識

前言

掌握各數據類型的存儲開銷,是表設計、容量規劃、效能優化的基礎。本文整理 MySQL 官方文檔,按類別匯總各類型存儲字節數,並附帶選型建議。

一、數值類型

類型存儲字節範圍/說明
TINYINT1-128~127 / 0~255 (UNSIGNED)
SMALLINT2-32768~32767
MEDIUMINT3-8388608~8388607
INT / INTEGER4-2147483648~2147483647
BIGINT8±9.22e18
FLOAT(p)4 (p≤24) / 8 (25≤p≤53)單精度/雙精度自動轉換
FLOAT4單精度
DOUBLE / DOUBLE PRECISION / REAL8雙精度
DECIMAL(M,D) / NUMERIC(M,D)M+2 (M>D) / D+2 (M≤D)精確定點數,每 9 位數字佔 4 字節
BIT(M)≈ (M+7)/8位字段

二、日期時間類型

類型存儲字節範圍/精度
DATE31000-01-01 ~ 9999-12-31
TIME3-838:59:59 ~ 838:59:59
YEAR11901 ~ 2155
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59(秒精度)
TIMESTAMP41970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC(時區感知)
DATETIME(6) / TIMESTAMP(6)8 / 7微秒精度(5.6.4+)

三、字符串類型

類型存儲字節最大長度/說明
CHAR(M)M0~255 字符,固定長度,右側填充空格
VARCHAR(M)L+1 (M≤255) / L+2 (M>255)變長,L 為實際字符字節長度
TINYBLOB / TINYTEXTL+1< 256 字節
BLOB / TEXTL+2< 64 KB
MEDIUMBLOB / MEDIUMTEXTL+3< 16 MB
LONGBLOB / LONGTEXTL+4< 4 GB
ENUM('v1','v2',...)1 或 2取決於枚舉值數量(≤255 用 1 字節,≤65535 用 2 字節)
SET('v1','v2',...)1~8取決於成員數量(最多 64 個成員)

四、選型黃金法則

  1. 越小越好:滿足業務前提下選最小類型(如狀態碼用 TINYINT UNSIGNED)。
  2. 定長優於變長:長度固定且頻繁更新的欄位(如 MD5、UUID)用 CHAR。
  3. 避免 BLOB/TEXT:非必要不存大文本,拆分到獨立表或對象存儲。
  4. 金額用 DECIMAL:DECIMAL(19,4) 滿足多數貨幣場景。
  5. 時間戳首選 TIMESTAMP:自帶時區轉換、佔 4 字節;需跨 2038 年用 DATETIME。
  6. 枚舉/集合慎用:修改結構需 ALTER TABLE 鎖表,擴展性差,建議改用查找表。

五、獲取實際表大小的 SQL

SELECT
    TABLE_NAME,
    ROUND(DATA_LENGTH/1024/1024,2) AS data_mb,
    ROUND(INDEX_LENGTH/1024/1024,2) AS index_mb,
    TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db'
ORDER BY DATA_LENGTH DESC;

六、總結

本表為 MySQL 8.0 通用規範,具體版本、存儲引擎(InnoDB/MyISAM)、行格式(Compact/Dynamic/Compressed)可能略有差異。設計時請以「業務範圍 + 存儲開銷 + 索引效能」三維權衡,並用實際數據驗證。

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