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

MySQL 資料型別選擇與建庫策略最佳實踐

     編輯:MySQL 資料庫相關知識

核心原則

無論免費空間還是電商大站,合理設計表結構、充分利用空間都是必修課。核心原則:夠用就好,越小越好。

一、數值型別深度解析

1. 整數型別(最常用、最值得精打細算)

型別儲存空間無符號最大值適用場景
TINYINT1 Byte255年齡、狀態碼、布林替代
SMALLINT2 Bytes65,535遊戲技能值、中小型表自增 ID
MEDIUMINT3 Bytes16,777,215千萬級表自增 ID(省 1 Byte/行)
INT4 Bytes4,294,967,295通用自增 ID、外鍵引用
BIGINT8 Bytes18,446,744,073,709,551,615極大數據量、分布式 ID
範例:1600 萬行表用 MEDIUMINT 代替 INT,節省 ~16MB 空間。

2. 定點數:DECIMAL / NUMERIC

  • 以字串形式儲存,每位數字(含小數點)佔 1 Byte
  • 優點:精度固定,運算不「失真」
  • 適用:價格、金額、費率 等精度敏感欄位
  • 語法:DECIMAL(10,2) 共 10 位,小數 2 位

3. 浮點數:FLOAT / DOUBLE

型別空間最小絕對值適用性
FLOAT4 Bytes~1.17E-38民用極少用到
DOUBLE8 Bytes~2.22E-308科學計算、極高精度需求
作者從未在實務中使用過 FLOAT/DOUBLE,民用場景建議改用 DECIMAL。

二、日期時間型別

型別空間範圍適用場景
DATE3 Bytes1000-01-01 ~ 9999-12-31純日期(生日、入職日)
TIME3 Bytes-838:59:59 ~ 838:59:59純時間(工時、時長)
DATETIME8 Bytes1000-01-01 00:00:00 ~ 9999-12-31 23:59:59通用日期時間(訂單時間)
TIMESTAMP4 Bytes1970-01-01 ~ 2038-01-19自動更新時間戳、跨時區應用
YEAR1 Byte1901 ~ 2155年份欄位
只需日期用 DATE,只需時間用 TIME,通用用 DATETIME,需時區感知用 TIMESTAMP。

三、字串型別

型別特性空間計算適用場景
CHAR(N)固定長度N Bytes長度固定(MD5、UUID、國碼)
VARCHAR(N)可變長度實際長度 + 1 Byte長度不固定(姓名、標題、地址)
TEXT長文本資料長度 + 2 Bytes文章內容、描述、JSON

CHAR vs VARCHAR 決策邏輯

  • 若最大長度 N,且多數行接近 N → 用 CHAR(避免 +1 Byte 開銷)
  • 若長度差異大、平均遠小於 N → 用 VARCHAR
  • 範例:股票代碼固定 6 碼 → CHAR(6);股票名稱不定長 → VARCHAR(20)

四、建庫策略清單

  1. 主鍵:優先 INT UNSIGNED AUTO_INCREMENT,預估超 40 億用 BIGINT
  2. 外鍵:型別、長度、簽名與主鍵完全一致
  3. 金額:DECIMAL(12,2) 或 DECIMAL(10,4)
  4. 狀態/類型:TINYINT UNSIGNED + 字典表/ENUM
  5. 時間:DATETIME(業務時間)+ TIMESTAMP(創建/更新自動維護)
  6. 字串:預設 VARCHAR,固定碼用 CHAR,長文本用 TEXT
  7. 索引:僅在查詢條件、JOIN、ORDER BY 欄位建立,避免過度索引
  8. 字元集:統一 utf8mb4,排序規則 utf8mb4_unicode_ci
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved