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

MySQL 資料類型深度剖析與建庫選型策略:數值、日期、字串、枚舉全攻略

     編輯:MySQL 資料庫相關知識

前言

選對資料類型 = 省空間 + 快查詢 + 免災難。本文依類別詳細解析 MySQL 主流型別的儲存特性、適用場景與選型口訣。

一、數值類型

1. 整數家族:依範圍選最小

型別位元組無號最大值典型用途
TINYINT1255狀態碼、布林、年齡
SMALLINT265,535技能值、小計數器
MEDIUMINT316,777,215千萬級自增主鍵
INT44,294,967,295通用主鍵、外鍵
BIGINT81.84×10¹⁹分散式 ID、大數據主鍵

口訣:夠用就好、越小越好。千萬行表用 MEDIUMINT 代替 INT 可省 10MB+。

2. 定點數 DECIMAL(p,s) / NUMERIC:金額必備

  • 以字串形式逐位儲存,不失真
  • 價格、金額、匯率:DECIMAL(10,2)、DECIMAL(18,4)
  • 空間較大(每位 1 字節),但精度無誤差

3. 浮點數 FLOAT/DOUBLE:科學計算專用

  • FLOAT:4 字節,精度 ~7 位有效數字
  • DOUBLE:8 字節,精度 ~15 位
  • 民用系統極少用到,避免 0.1+0.2≠0.3 類問題

二、日期時間類型

型別範圍空間選型建議
DATE1000-01-01 ~ 9999-12-313B純日期(生日、訂單日)
TIME-838:59:59 ~ 838:59:593B純時間(工時、時段)
DATETIME1000 ~ 9999 年8B通用日期時間,無時區轉換
TIMESTAMP1970 ~ 2038 年4B需時區自動轉換、自動更新
YEAR1901 ~ 21551B僅需年份

關鍵差異:TIMESTAMP 存儲 UTC,讀取時按 session 時區轉換;DATETIME 原樣存取。跨時區應用首選 TIMESTAMP。

三、字串類型

定長 vs 變長

型別儲存方式適用場景
CHAR(n)固定 n 字節,不足右補空格固定長度:股票代碼、MD5、UUID、國家代碼
VARCHAR(n)實際長度 + 1~2 字節長度前綴可變長度:姓名、標題、郵件、地址

決策點:若 90%+ 行長度接近上限 → CHAR;否則 VARCHAR。

大文本家族

型別最大長度額外空間用途
TINYTEXT255 B+1 B短備註
TEXT64 KB+2 B文章摘要、日誌
MEDIUMTEXT16 MB+3 B長文、HTML 內容
LONGTEXT4 GB+4 B極大文檔、二進制序列化

四、枚舉與集合

  • ENUM('v1','v2',...):單選,最多 65,535 個值,1~2 字節。例:性別 ENUM('M','F')、狀態 ENUM('on','off','pending')
  • SET('v1','v2',...):多選,最多 64 個成員,1~8 字節。例:標籤 SET('tech','life','travel')

優點:直接用字串讀寫、空間極小。缺點:修改成員需 ALTER TABLE、不可用於外鍵、遷移他資料庫不便。

建庫選型速查表

業務場景推薦型別備註
用戶 ID(千萬級)MEDIUMINT UNSIGNED AUTO_INCREMENT省 25% 空間
商品價格DECIMAL(10,2)嚴禁 FLOAT
訂單建立時間DATETIME / TIMESTAMP跨時區用 TIMESTAMP
手機號CHAR(11)固定長度
文章內容MEDIUMTEXT視長度升級
訂單狀態ENUM('new','paid','shipped','done','cancel')可讀性佳

結語

資料類型選型是資料庫設計的地基。原則只有三條:精度滿足業務、空間越小越好、避免隱式轉換。上線前用 EXPLAIN 驗證索引是否生效,上線後定期 ANALYZE TABLE 更新統計資訊,讓類型選型持續發揮效能紅利。

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