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

MySQL 所有數據類型取值範圍與存儲特性完整速查表

     編輯:MySQL 資料庫相關知識

數值類型

類型存儲有符號範圍無符號範圍用途建議
TINYINT1B-128 ~ 1270 ~ 255布爾標誌、極小計數、枚舉值
SMALLINT2B-32,768 ~ 32,7670 ~ 65,535小範圍計數、年齡、狀態碼
MEDIUMINT3B-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、RGB 顏色值
INT / INTEGER4B-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295主鍵、外鍵、通用計數(首選)
BIGINT8B-9.22e18 ~ 9.22e180 ~ 1.84e19海量主鍵、時間戳毫秒、大文件字節數
FLOAT(M,D)4B±3.4028E38 ~ ±1.1755E-38—單精度科學計算、不精確金額慎用
DOUBLE(M,D) / REAL8B±1.7977E308 ~ ±2.2251E-308—雙精度科學計算、GIS 坐標
DECIMAL(M,D) / NUMERICM+2B精確定點,M≤65, D≤30—金額、價格、比率、任何需精確計算
BIT(M)~M/8 B位域 1~64 位—位掩碼、權限位圖

日期時間類型

類型存儲範圍精度時區感知用途
DATE3B1000-01-01 ~ 9999-12-31天否生日、紀念日、純日期業務
TIME3B-838:59:59 ~ 838:59:59秒否時長、每日重複時間點
DATETIME8B1000-01-01 00:00:00 ~ 9999-12-31 23:59:59秒否歷史記錄、不需時區轉換的時間點
TIMESTAMP4B1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC秒是 (會話時區轉換)創建/更新時間、跨時區應用
YEAR[(2|4)]1B1901~2155 (4位) / 70~69 (2位, 1970~2069)年否年份篩選、歸檔分區

關鍵差異:TIMESTAMP 存儲 UTC,讀取時按 time_zone 轉換;DATETIME 存儲本地時間,不轉換。5.6.4+ 支持 DATETIME(6)/TIMESTAMP(6) 微秒精度。

字符串類型

類型最大長度存儲開銷特性用途
CHAR(M)255 字符M 字符 (定長,右補空格)讀取去尾空格,定長快固定長度代碼:MD5、UUID、國標碼
VARCHAR(M)65,535 字符 (行限制)L+1/2 字節 (實際長度+長度前綴)變長,不補空格通用字符串、名稱、標題、JSON 片段
TINYTEXT / TINYBLOB255 (2^8-1)L+1不指定字符集/二進制極短文本/二進制
TEXT / BLOB65,535 (2^16-1)L+2—文章正文、日志、中等二進制
MEDIUMTEXT / MEDIUMBLOB16,777,215 (2^24-1)L+3—長文檔、圖片、文檔
LONGTEXT / LONGBLOB4,294,967,295 (2^32-1)L+4—超大對象、視頻、備份文件
ENUM('v1','v2',...)65,535 個值1-2 字節內部存數字索引,嚴格枚舉狀態機、固定分類、性別、優先級
SET('v1','v2',...)64 個成員1-8 字節位掩碼,可多選標籤、權限集合、多屬性

行長度限制:MySQL 單行最大 65,535 字節(除 BLOB/TEXT 溢出頁)。VARCHAR(65535) 實際不可達,因長度前綴佔 2 字節、NULL 位圖、其他列開銷。

空間數據類型 (MySQL 4.1+ / 5.7+ 增強)

類型說明索引支持
GEOMETRY所有幾何類型基類SPATIAL (MyISAM/Aria/InnoDB 5.7+)
POINT單點 (X,Y)✓
LINESTRING線串 (多點連線)✓
POLYGON多邊形 (外環+內環)✓
MULTIPOINT / MULTILINESTRING / MULTIPOLYGON集合類型✓
GEOMETRYCOLLECTION混合集合✓

JSON 類型 (5.7+)

  • 存儲:二進制格式,解析快、支持部分更新。
  • 索引:不能直接索引,需通過虛擬列 INDEX idx_json_name ((json_col->>'$.name'))。
  • 函數:JSON_EXTRACT、->、->>、JSON_SET、JSON_ARRAYAGG 等。

選型決策樹

  1. 整數主鍵 → BIGINT UNSIGNED AUTO_INCREMENT (單表 >42 億) 或 INT UNSIGNED (足夠則用)。
  2. 金額/價格/匯率 → DECIMAL(19,4) 或 DECIMAL(12,2),絕不 FLOAT/DOUBLE。
  3. 時間點且跨時區 → TIMESTAMP;歷史/生日/不轉換 → DATETIME。
  4. 微秒精度 → DATETIME(6)/TIMESTAMP(6) (5.6.4+)。
  5. 短定長代碼 → CHAR(32) (MD5) / CHAR(36) (UUID);其餘字符串 → VARCHAR。
  6. 超大文本/二進制 → LONGTEXT/LONGBLOB,考慮對象存儲 (S3/MinIO) 只存 URL。
  7. 固定枚舉 → ENUM;多選標籤 → SET 或關聯表 (規範化)。

總結

「用最小足夠的類型」是 schema 設計鐵律:節省存儲 → 更多熱數據進內存 → 少 I/O → 快查詢。建表前先問:業務上限多大?需不需要精確計算?跨時區嗎?會不會全文搜索? 對號入座,拒絕「一律 VARCHAR(255) / BIGINT / DATETIME」的懶惰設計。

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