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

MySQL 字段類型取值範圍完整速查表:數值、日期、字符串、二進制、枚舉全覆蓋

     編輯:MySQL 資料庫相關知識

前言:選對類型 = 省空間 + 快查詢 + 避坑

MySQL 提供豐富的數據類型,正確選型直接影響存儲效率、索引性能、數據完整性。本文整理 **數值類型 (整數/浮點/定點)、日期時間、字符串、二進制大對象、枚舉/集合** 完整取值範圍、存儲字節、適用場景與選型原則,做桌面速查卡。

一、整數類型 (精確數值)

類型存儲 (Bytes)有符號範圍無符號範圍 (UNSIGNED)典型場景
TINYINT1-128 ~ 1270 ~ 255布爾標誌、極小計數、枚舉值
SMALLINT2-32,768 ~ 32,7670 ~ 65,535小範圍計數、年齡、狀態碼
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、IPv4 存儲 (INT UNSIGNED 更常用)
INT / INTEGER4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295**通用主鍵 ID、計數器、外鍵** (首選)
BIGINT8-9.22E18 ~ 9.22E180 ~ 1.84E19超大主鍵 (分布式 ID、雪花算法)、大計數

選型原則:夠用就行,越小越好。主鍵優先 BIGINT UNSIGNED (防耗盡) 或 INT UNSIGNED (單表 < 40 億);狀態/標誌用 TINYINT UNSIGNED;避免指定顯示寬度 (如 INT(11)),MySQL 8.0 已棄用,不影響存儲範圍。

二、浮點與定點類型 (近似/精確小數)

類型存儲範圍 (近似)精度適用場景
FLOAT (單精度)4 Bytes±1.17E-38 ~ ±3.40E+38~7 位有效數字科學計算、非精確測量、坐標 (可接受誤差)
DOUBLE / REAL (雙精度)8 Bytes±2.22E-308 ~ ±1.79E+308~15-17 位有效數字高精度科學計算、地理空間
DECIMAL(M,D) / NUMERIC(M,D)M+2 Bytes (約)由 M,D 決定,最大 65 位數字**精確到小數點後 D 位**金額、價格、匯率、庫存、任何不能有誤差的業務數據

鐵律:**貨幣/金額/庫存 必用 DECIMAL**。FLOAT/DOUBLE 為二進制浮點,0.1 + 0.2 != 0.3,財務系統嚴禁使用。

三、日期時間類型

類型存儲範圍精度時區感知典型場景
DATE3 Bytes1000-01-01 ~ 9999-12-31天否生日、入職日期、訂單日期
DATETIME8 Bytes (5.6.4 前) / 5+Bytes (5.6.4+)1000-01-01 00:00:00 ~ 9999-12-31 23:59:59秒 (可擴展微秒 .ffffff)否業務時間、日志記錄、創建/更新時間 (不跨時區)
TIMESTAMP4 Bytes1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC秒 (可擴展微秒)是 (存儲 UTC,讀取按會話時區轉換)跨時區應用、自動更新列 (ON UPDATE CURRENT_TIMESTAMP)
TIME3 Bytes-838:59:59 ~ 838:59:59秒 (可擴展微秒)否耗時、班次時間、每日定時任務
YEAR1 Byte1901 ~ 2155 (4位) / 1970-2069 (2位)年否年份統計、車型年款

選型決策樹:
需要時區轉換/自動更新 → TIMESTAMP (注意 2038 年問題)
不需要時區、範圍大、手動設置 → DATETIME (推薦通用)
僅日期 → DATE
僅時間/間隔 → TIME

四、字符串類型

類型最大長度存儲特點大小寫敏感尾部空格處理典型場景
CHAR(M) [BINARY]255 字符固定長度,右側填充空格無 BINARY 不敏感讀取時自動去除固定長度代碼 (MD5、UUID、ISO 代碼、手機號)
VARCHAR(M) [BINARY]255 (≤5.0.3) / 65,535 (5.0.3+)變長,1-2 字節長度前綴 + 實際內容無 BINARY 不敏感保留 (不填充不截斷)**通用變長文本** (姓名、標題、地址、JSON 片段)
TINYTEXT255 (2^8-1)變長,無默認值,不可整列索引不敏感保留極短文本 (標籤、備註)
TEXT65,535 (2^16-1)同上不敏感保留文章正文、日志、中等文本
MEDIUMTEXT16,777,215 (2^24-1)同上不敏感保留長文本、文檔
LONGTEXT4,294,967,295 (2^32-1)同上不敏感保留超長文本、完整文檔存儲

關鍵差異:CHAR 固定長度適合極短、固定、頻繁更新的列 (避免碎片);VARCHAR 變長節省空間,首選通用文本類型;TEXT 族群無法設默認值、索引需指定前綴長度、不在內存臨時表 (會落盤),性能較差,**能用 VARCHAR 就不用 TEXT**。

五、二進制大對象 (BLOB 族群)

類型最大長度 (Bytes)對應文本類型典型場景
TINYBLOB255TINYTEXT極小二進制 (圖標、縮略圖)
BLOB65,535TEXT圖片、文檔、序列化對象
MEDIUMBLOB16,777,215MEDIUMTEXT大文件、視頻片段
LONGBLOB4,294,967,295LONGTEXT超大文件、備份映像

最佳實踐:數據庫**不建議存大文件**。存對象存儲 (S3/OSS/MinIO) 路徑/URL,DB 僅存 VARCHAR(512) 路徑 + 元數據。若必須存 DB,用 BLOB 族群,設置 max_allowed_packet 足夠大。

六、枚舉與集合類型

類型定義語法成員上限存儲典型場景
ENUM('v1','v2',...)單選,最多 65,535 個不同值65,5351-2 Bytes (索引值)狀態機 (pending/paid/shipped/cancelled)、性別、固定分類
SET('v1','v2',...)多選,最多 64 個成員641-8 Bytes (位圖)權限標籤、多屬性標記 (tag1,tag3,tag5)

優缺點:
✅ 存儲極小、內建約束、可讀性強
❌ 修改成員需 ALTER TABLE (鎖表)、不可用於外鍵、排序按索引值而非字符串、遷移異構 DB 麻煩
建議:穩定、少量、極少變更 的枚舉集合可用;其餘改用 TINYINT UNSIGNED + 應用層常量/字典表,靈活性高得多。

七、選型決策速查卡

業務需求推薦類型備選/避坑
主鍵 ID (單表 < 40 億)BIGINT UNSIGNED AUTO_INCREMENT / INT UNSIGNED避免 INT(11) 顯示寬度
分布式唯一 ID (雪花/UUID)BIGINT UNSIGNED / CHAR(36) (UUID) / BINARY(16) (UUID 二進制)CHAR(36) 佔空間大、索引慢
金額/價格/匯率DECIMAL(19,4) / DECIMAL(10,2)嚴禁 FLOAT/DOUBLE
創建時間/更新時間DATETIME(3) / TIMESTAMP(3) (需時區)默認值 CURRENT_TIMESTAMP(3)、更新 ON UPDATE CURRENT_TIMESTAMP(3)
用戶姓名/標題/地址VARCHAR(100/200/500) CHARSET utf8mb4避免 TEXT
文章正文/長文本MEDIUMTEXT / LONGTEXT考慮對象存儲 + 路徑
圖片/文件二進制對象存儲 + VARCHAR(512) 路徑必存 DB 用 BLOB,調大 max_allowed_packet
訂單狀態/性別/類型TINYINT UNSIGNED + 應用層常量穩定極少變可用 ENUM
標籤/多屬性JSON (5.7+) / 關聯表 tag_mapSET 限 64 個、難擴展

結語

數據類型選型是架構設計的基石。**「整數優先 BIGINT/INT、金額必用 DECIMAL、時間通用 DATETIME、文本首選 VARCHAR、大對象外存、枚舉慎用 ENUM/SET」**——將這句口訣貼在顯示器邊,每次建表默念三遍,能避開 90% 的存儲與性能坑。

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