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

MySQL 數據類型全解析:數值、日期、字串、二進位四大族系選型指南

     編輯:MySQL 綜合教學

MySQL 數據類型全解析:數值、日期、字串、二進位四大族系選型指南

「選對類型,效能一半」—— 數據類型決定了儲存空間、索引效率、計算精度與業務邊界。本文系統梳理 MySQL 四大族系 20+ 核心類型:定義、儲存字節、取值範圍、適用場景、選型陷阱與最佳實踐,打造「查得準、用得對、不浪費」的類型選型手冊。

一、數值類型:整數、浮點、定點

1.1 整數類型(精確計數、索引最優)

類型字節有符號範圍無符號範圍典型場景
TINYINT1-128 ~ 1270 ~ 255布爾標誌、枚舉狀態、極小計數
SMALLINT2-32,768 ~ 32,7670 ~ 65,535小範圍計數、年齡、郵編
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、RGB 顏色值
INT / INTEGER4-21億 ~ 21億0 ~ 42億通用主鍵、業務 ID、計數器
BIGINT8-922京 ~ 922京0 ~ 1844京分布式 ID、大數據量主鍵、時間戳毫秒

選型鐵律:能用較小類型絕不擴大;主鍵推薦 BIGINT UNSIGNED AUTO_INCREMENT;ZEROFILL 僅影響顯示,不改變儲存。

1.2 浮點數與定點數(精度的博弈)

類型字節精度特性適用場景
FLOAT(M,D)4單精度,約 7 位有效數字,近似值科學計算、非精確測量、坐標
DOUBLE(M,D)8雙精度,約 15 位有效數字,近似值高精度科學計算
DECIMAL(M,D) / NUMERICM+2 概算精確定點數,字串存儲,按四捨五入金額、價格、匯率、精確比率

參數含義:M = 總位數(不含小數點),D = 小數位數。
金額鐵律:嚴禁 FLOAT/DOUBLE 存儲金額,必須用 DECIMAL(10,2) 或 BIGINT 存分/厘整數。

二、日期與時間類型

類型字節範圍格式核心差異
DATE31000-01-01 ~ 9999-12-31YYYY-MM-DD純日期,無時區
TIME3-838:59:59 ~ 838:59:59HH:MM:SS純時間/間隔
YEAR11901 ~ 2155YYYY僅年份
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS無時區,靜態快照
TIMESTAMP41970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTCYYYY-MM-DD HH:MM:SS時區感知,存儲 UTC,讀取轉換

選型決策樹:

  • 需時區轉換、自動更新 → TIMESTAMP(注意 2038 年上限)
  • 歷史/未來日期、無時區業務 → DATETIME
  • 僅日期/時間 → DATE/TIME 節省空間
  • 高精度毫秒/微秒 → DATETIME(6)/TIMESTAMP(6)(5.6.4+)

三、字串類型

類型長度特性儲存開銷適用場景
CHAR(M)固定長 0~255 字符M 字符(右填充空格)定長代碼:MD5、UUID、國標代碼、性別
VARCHAR(M)可變長 0~65,535 字符實際長度 + 1~2 字節長度前綴通用變長文本:姓名、標題、描述
TINYTEXT255 字符L + 1 字節極短文本
TEXT65,535 字符L + 2 字節中等文本:文章、日誌
MEDIUMTEXT16,777,215 字符L + 3 字節長文本
LONGTEXT4,294,967,295 字符L + 4 字節超長文本、JSON 文檔

關鍵差異**:

  • CHAR 固定長度,適合極短且長度恆定的值(如 CHAR(32) 存 MD5),不支援默認值 NULL 的情況下尾部空格會被截斷
  • VARCHAR 變長,VARCHAR(255) 以上長度前綴佔 2 字節,建議業務實際上限設定
  • TEXT 族系不支援默認值、不支援全長度索引(需前綴索引)、查詢可能產生臨時表,慎用於高頻查詢列

四、二進位類型

類型長度特性儲存開銷適用場景
BINARY(M)固定長 0~255 位元組M 位元組定長二進位:哈希值、加密密文、文件指紋
VARBINARY(M)可變長 0~65,535 位元組實際長度 + 1~2 字節變長二進位:圖片縮略圖、序列化對象
TINYBLOB255 位元組L + 1 字節極小二進位
BLOB65,535 位元組L + 2 字節中等二進位:圖片、文檔
MEDIUMBLOB16,777,215 位元組L + 3 字節大二進位
LONGBLOB4,294,967,295 位元組L + 4 字節超大二進位

字符 vs 二進位本質**:CHAR/VARCHAR/TEXT 有字符集與校對規則,比較遵循校對;BINARY/VARBINARY/BLOB 無字符集,按位元組比較,大小寫敏感、無排序歧義。

五、類型選型黃金法則

  1. 最小足夠原則:滿足業務範圍的最小類型,節省空間、加快索引、減少 I/O
  2. 精度優先:金額、比率、精確計量 → DECIMAL 或整數放大
  3. 時區感知:跨時區系統 → TIMESTAMP;單時區/歷史數據 → DATETIME
  4. 字符集統一:全庫表欄位統一 utf8mb4,避免隱式轉換導致索引失效
  5. 拒絕 TEXT/BLOB 高頻查詢列:改用 VARCHAR + 合理長度,或拆分到擴展表
  6. 主鍵類型固化:BIGINT UNSIGNED AUTO_INCREMENT,嚴禁 UUID/字串/業務鍵

將此手冊納入團隊「數據字典規範」,新建表必經類型評審,從源頭杜絕「類型不匹配」引發的效能與業務雙重風險。

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