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

MySQL 數據類型深度解析與建庫策略:數值、日期、字符、枚舉集合的精準選型

     編輯:MySQL 資料庫相關知識

一、數值類型三大類

1. 定點數:DECIMAL / NUMERIC(同義)

  • 存儲方式:字符串形式,每位數字(含小數點)佔 1 字節
  • 優勢:精度固定,運算不「失真」
  • 適用:價格、金額、財務數據——準確度 > 空間/性能
  • 代價:空間佔用大,計算較慢

2. 浮點數:FLOAT (4B) / DOUBLE (8B)

  • 優勢:表示極小絕對值 (FLOAT ~1.17E-38, DOUBLE ~2.22E-308)
  • 適用:科學計算、工程測量等高精度科學場景
  • 民用系統幾乎不用:作者從未遇到合適場景

3. 整數類型:核心選型戰場

類型字節無符號最大值典型適用場景
TINYINT1255年齡、狀態碼、布爾標誌、極小計數
SMALLINT265,535遊戲技能值、中等計數、郵編(數字)
MEDIUMINT316,777,215千萬級表自增 ID 首選,省 1B/行
INT44,294,967,295通用 ID、大計數、IPv4 整數存儲
BIGINT818,446,744,073,709,551,615極大計數、分布式 ID (Snowflake)、時間戳毫秒

原則:「夠用且最小」。1600 萬行表用 MEDIUMINT 代替 INT 節省 10MB+ 空間及緩存壓力。

二、日期時間類型

類型字節範圍適用
DATE31000-01-01 ~ 9999-12-31純日期(生日、入職)
TIME3-838:59:59 ~ 838:59:59純時間(鬧鐘、時長)
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59最常用:創建/更新時間、業務時間點
TIMESTAMP41970-01-01 ~ 2038-01-19 (UTC)自動更新列、跨時區應用、版本控制
YEAR11901 ~ 2155年份唯一場景

關鍵差異:TIMESTAMP 存儲 UTC、讀取轉換會話時區,DATETIME 時區無關。2038 年問題限制 TIMESTAMP 長期使用。

三、字符串類型

類型長度特性空間計算選型判斷
CHAR(N)固定長度N 字節值長度固定/極接近固定(MD5、UUID、郵編、股票代碼)
VARCHAR(N)可變長度實際長度 + 1-2 字節長度變化大,最大值可預估(用戶名、標題、URL)
TINYTEXT≤255L + 1短文本
TEXT≤65,535L + 2文章正文、描述
MEDIUMTEXT≤16,777,215L + 3長文本
LONGTEXT≤4,294,967,295L + 4超長文本

實戰案例:股票表

  • 名稱:絕大多數 4 字(8B) → CHAR(8)
  • 代碼:滬市 6 位、深市 4 位,滬市佔多數 → CHAR(6) 優於 VARCHAR(6) (深市佔 5B+1=6B,滬市 6B+1=7B,加權平均更大)

四、枚舉與集合

類型成員上限選擇規則空間典型場景
ENUM65,535單選,必選其一1-2 字節性別、狀態、類別、省份
SET64多選,可空1-8 字節權限位圖、標籤、多屬性標記

亮點

  • 底層存儲為整數(位圖),比較/排序/索引極快
  • 應用層直接用字符串 'male'/'female' 讀寫,無需映射轉換
  • ENUM('帥哥','美眉') 1 字節完美替代 TINYINT + 應用層映射

建庫策略核心口訣

  1. 數值優先:能用數值別用字符串(ENUM/SET 本質是數值)
  2. 定長優先:長度固定用 CHAR,變長用 VARCHAR
  3. 最小充分:整型選最小夠用,避免 BIGINT 濫用
  4. 精度分離:金額用 DECIMAL,科學用 FLOAT/DOUBLE,不可混用
  5. 時區感知:跨時區用 TIMESTAMP,單時區用 DATETIME
  6. 文本分級:≤255 TINYTEXT,≤64K TEXT,更大 MEDIUM/LONGTEXT
  7. 枚舉代替查表:低基數固定集合優先 ENUM/SET

總結

數據類型選型是 Schema 設計的基石,直接決定存儲空間、索引大小、查詢速度、應用層代碼複雜度。請在建表前完成業務數據畫像分析,依據上述策略精準落型,事半功倍。

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