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

MySQL 資料類型深度解析與資料庫設計選型策略

     編輯:MySQL 資料庫相關知識

數值類型選型鐵律:夠用就好,越小越好

整數家族

TINYINTSMALLINTMEDIUMINTINTBIGINT
類型儲存無符號範圍典型用途
1B0~255年齡、狀態碼、布林旗標
2B0~65,535技能值、小型字典 ID
3B0~16.7M中型表自增主鍵(省 1B vs INT)
4B0~4.29B通用主鍵、大型字典
8B0~1.84E19分散式 ID、超大表主鍵

案例:1600 萬列表用 MEDIUMINT 替代 INT 節省 ~16MB 空間。

定點數:金額欄位唯一正解

DECIMAL(M,D) / NUMERIC 以字串形式逐位儲存,**精確無誤差**,適合價格、金額、匯率。儲存開銷:M+2 bytes(含小數點、符號)。

浮點數:科學計算專用

  • FLOAT (4B) ~ 1.17E-38 精度。
  • DOUBLE (8B) ~ 2.22E-308 精度。
  • **民用系統幾乎用不到**,避免 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年份維度表

字串類型:定長 vs 變長

類型儲存方式適用場景
CHAR(N)固定 N bytes,不足右補空格長度極固定:股票代碼(6)、MD5(32)、UUID(36)
VARCHAR(N)實際長度 + 1~2 bytes 長度前綴長度變動:姓名、地址、標題

決策公式:若 **平均長度 > N - 1** → 用 CHAR;否則 VARCHAR。

案例:股票名稱多為 4 字 (8B) → CHAR(8);代碼滬 6 位/深 4 位,滬市佔多數 → CHAR(6) 勝過 VARCHAR(6)。

大物件類型

類型最大長度額外開銷
TINYTEXT/BLOB255 B+1B
TEXT/BLOB64 KB+2B
MEDIUMTEXT/BLOB16 MB+3B
LONGTEXT/BLOB4 GB+4B

論壇貼文、文章正文:依預估長度由小到大選型,避免過度分配。

枚舉與集合:低基數離散值神器

  • ENUM('A','B','C'):單選,1~2 bytes,直接用字串寫入 'A'。
  • SET('A','B','C'):多選,1~8 bytes,位元組合存儲。

案例:性別 ENUM('帥哥','美眉') 1 byte,比 TINYINT 更語義化、防呆。

設計策略總結

  1. **主鍵**:優先 MEDIUMINT/INT AUTO_INCREMENT,分散式用 BIGINT + Snowflake。
  2. **金額**:DECIMAL(10,2) 或 DECIMAL(19,4)。
  3. **時間**:業務時間 DATETIME,審計/版本戳 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
  4. **字串**:定長用 CHAR,變長用 VARCHAR,大文本分級選 TEXT 族。
  5. **低基數**:ENUM/SET 替代查表關聯,極致節省空間與 Join 成本。
  6. **字元集**:全庫 utf8mb4,COLLATE utf8mb4_unicode_ci。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved