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

MySQL 數據類型全解析與建庫策略:精打細算存儲空間,業務精準匹配類型

     編輯:MySQL 綜合教學

無論免費空間還是電商大站,合理設計表結構、充分利用存儲空間都是基本功。本文系統梳理 MySQL 常用數據類型特性與選型原則,並貫穿「夠用且最小」的建庫哲學。

一、數字類型:三大類,各有所長

1. 定點數類 (DECIMAL/NUMERIC) —— 金額字段首選

以字符串形式存儲,每位 (含小數點) 佔 1 字節,空間佔用大。但小數位固定、運算不失真,完美適配「價格」「金額」等精度敏感場景。建議: 金額字段務必用 DECIMAL(10,2) 等顯式定義精度。

2. 浮點數類 (FLOAT/DOUBLE) —— 科學計算專用

  • FLOAT (4 字節) 單精度,最小約 1.17E-38
  • DOUBLE (8 字節) 雙精度,最小約 2.22E-308

優勢在極小數值表達,民用業務極少用到。建議: 非科學計算場景慎用,避免精度陷阱。

3. 整數類 —— 最常用,最值得精打細算

類型存儲無符號最大值典型適用場景
TINYINT1B255年齡、狀態碼、小範圍枚舉
SMALLINT2B65,535遊戲技能值、中等計數器
MEDIUMINT3B16,777,215千萬級自增主鍵首選,比 INT 省 1B/行
INT4B4,294,967,295通用自增 ID、大計數器
BIGINT8B1.84E19極大數據量主鍵、分布式 ID

實戰算賬: 1600 萬行表用 MEDIUMINT 替代 INT 節省 ~16MB 空間,索引也更緊湊,緩存命中率提升。

二、日期時間類:按需選擇,無需過度

  • DATE (3B) - 僅日期
  • TIME (3B) - 僅時間
  • DATETIME (8B) - 日期時間,範圍 1000-9999 年
  • TIMESTAMP (4B) - 1970-2038 年,自動時區轉換
  • YEAR (1B) - 年份

原則: 業務只需日期用 DATE,需時區感知用 TIMESTAMP,通用用 DATETIME。

三、字符串類:固定長用 CHAR,變長用 VARCHAR,大文本用 TEXT 家族

  • CHAR(N) 固定長,不足補空格,實際長度恆為 N。
  • VARCHAR(N) 變長,實際佔用 = 內容長度 + 1 字節長度前綴。

決策矩陣:

  • 長度固定且接近上限 (如股票名稱 8 字節、代碼 6 位) → CHAR
  • 長度變化大、平均遠小於上限 → VARCHAR
  • 超 255 字節 → TEXT 家族 (TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT),額外 1-4 字節長度前綴

案例: 股票代碼上海 6 位、深圳 4 位,若用 VARCHAR(6) 深圳股佔 5B、上海股佔 7B (含前綴),上海股更多時 CHAR(6) 更省空間。

四、枚舉與集合:低基數離散值的空間神器

  • ENUM('v1','v2',...) 最多 65535 值,單選,1-2 字節。性別、狀態機完美替代 TINYINT,直接存『帥哥/美眉』可讀性強。
  • SET('v1','v2',...) 最多 64 成員,多選,1-8 字節。適合標籤、權限掩碼場景。

建庫策略總綱

  1. 業務建模先行: 明確數值範圍、精度要求、長度分布、基數特徵。
  2. 類型最小化: 滿足業務前提下選最小類型,節省存儲、索引、內存、網絡傳輸全鏈路資源。
  3. 語義優於存儲: ENUM/SET 讓數據自帶業務含義,減少應用層映射邏輯。
  4. 預留演進空間: 自增主鍵預估 3-5 年增長量選型,避免中途 ALTER TABLE 鎖表風險。

數據類型選型是架構設計的微觀基石,精打細算在此,卓見成效在彼。

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