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

MySQL 資料類型選型與建庫策略:數值/字串/日期/二進制類型空間效能權衡指南

     編輯:MySQL 資料庫相關知識

合理選型直接影響儲存空間、索引效能與查詢精度。本文從數值、字串、日期、二進制四大類別,解析各類型儲存開銷、適用場景與避坑原則,助力建庫決策。

一、數值類型

類型儲存有號範圍無號範圍適用場景
TINYINT1B-128~1270~255布林、狀態碼、極小計數
SMALLINT2B-32K~32K0~65K年齡、郵遞區號、中型計數
MEDIUMINT3B-8M~8M0~16M百萬級自增 ID、中型統計
INT4B-21E~21E0~42E通用自增 ID、大多數計數
BIGINT8B-9E18~9E180~18E18極大計數、分散式 ID、時間戳毫秒

原則:夠用最小。1600 萬行表用 MEDIUMINT 替代 INT 節省 10MB+ 空間並縮小索引。

定點數:DECIMAL / NUMERIC

  • 字串儲存,每位 1B (含小數點),精度固定不失真
  • 價格、金額、匯率等嚴禁浮點場景
  • DECIMAL(10,2) 佔 10B,INT 分單位 (存分) 僅 4B 且計算更快

浮點數:FLOAT / DOUBLE

  • FLOAT 4B、DOUBLE 8B,IEEE 754 二進制近似,不可用於金額
  • 科學計算、座標、感測器數據等容許微小誤差場景

二、字串類型

類型儲存最大長度特性適用
CHAR(N)N B (定長)255右側空格填充、比較快固定長度代碼 (ISO 國碼、MD5 前綴)
VARCHAR(N)L+1/2B (變長)65,535實際長度+1/2B 長度前綴通用變長字串、名稱、描述
TINYTEXTL+1B255不支援 DEFAULT、不預設索引極短文本
TEXTL+2B64KB同上文章、日誌
MEDIUMTEXTL+3B16MB同上長文本
LONGTEXTL+4B4GB同上巨大文本

避坑:TEXT 族群無法建立完整索引 (僅前綴),排序/分組會用臨時表,慎用於高頻查詢欄位。

三、日期時間類型

類型儲存範圍精度時區感知適用
DATE3B1000-01-01 ~ 9999-12-31天無生日、入職日
TIME3B-838:59:59 ~ 838:59:59秒無工時、時長
DATETIME8B同 DATE + TIME秒無建立時間、日誌 (不隨時區變)
TIMESTAMP4B1970-01-01 ~ 2038-01-19秒有 (儲存 UTC、讀取轉換)更新時間、跨時區應用
YEAR1B1901~2155年無年份欄位

選型:跨時區用 TIMESTAMP;固定展示用 DATETIME;5.6.4+ 支援微秒 DATETIME(6)/TIMESTAMP(6)。

四、二進制類型

類型儲存最大適用
BINARY(N) / VARBINARY(N)同 CHAR/VARCHAR同二進制比較、加密雜湊、IP 位址
BLOB 族群 (TINY/BLOB/MEDIUM/LONG)同 TEXT 族群同圖片、檔案、序列化物件

大二進制物件建議存檔案系統/物件存儲,資料庫僅存路徑/雜湊。

五、建庫策略黃金法則

  1. 數值優先:整數 < 定點 < 浮點
  2. 定長優於變長 (CHAR vs VARCHAR) — 但權衡空間浪費
  3. 最小足夠原則:TINYINT > SMALLINT > MEDIUMINT > INT > BIGINT
  4. 金額用 INT 分單位 或 DECIMAL,嚴禁 FLOAT/DOUBLE
  5. 時間戳:跨時區 TIMESTAMP,單時區 DATETIME
  6. 大物件外存,庫存引用
  7. 預設 NOT NULL + DEFAULT,避免 NULL 索引失效
  8. 字符集:utf8mb4 (支援 Emoji) + utf8mb4_unicode_ci

類型選型是架構階段最低成本、最高收益的優化決策。

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