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

MySQL 核心資料類型深度解析:數值、日期、字串與複合類型完全指南

     編輯:MySQL 資料庫相關知識

資料類型是資料庫效能與儲存效率的基石。正確選型不僅能節省空間,更能大幅提升查詢速度。本文系統梳理 MySQL 五大類別資料類型的儲存特性、適用場景與避坑指南,助您做出最優決策。

一、數值類型:精準選型的藝術

1. 整數家族:從 TINYINT 到 BIGINT

MySQL 提供 5 種標準整數類型,儲存範圍呈指數級增長:

類型儲存位元組有號範圍無號範圍 (UNSIGNED)典型應用
TINYINT1-128 ~ 1270 ~ 255年齡、狀態碼、布林替代
SMALLINT2-32,768 ~ 32,7670 ~ 65,535郵遞區號、小型計數器
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等量級 ID、顏色 RGB 值
INT / INTEGER4-2.14B ~ 2.14B0 ~ 4.29B通用主鍵、外鍵、計數器
BIGINT8-9.22E18 ~ 9.22E180 ~ 1.84E19大數據主鍵、時間戳毫秒值

關鍵認知: 括號內的顯示寬度(如 INT(11))不影響儲存範圍,僅影響 ZEROFILL 時的前導零填充行為。MySQL 8.0 已棄用整數顯示寬度語法。

2. 浮點與定點數:精度陷阱與避坑指南

類型精度儲存位元組適用場景
FLOAT(M,D)單精度(約 7 位有效數字)4科學計算、近似值、坐標
DOUBLE(M,D)雙精度(約 15 位有效數字)8高精度科學計算
DECIMAL(M,D) / NUMERIC精確定點數(M 總位數,D 小數位)M+2 概估金融金額、精確計量

實測陷阱: FLOAT(5,3) 插入 123.45678 實際儲存變為 99.999(超出範圍截斷),插入 12.34567 變為 12.346(四捨五入)。金融、計費等精度敏感業務嚴禁使用 FLOAT/DOUBLE,必須使用 DECIMAL。

二、日期時間類型:時間維度的精準建模

類型儲存位元組範圍格式核心差異
DATE31000-01-01 ~ 9999-12-31YYYY-MM-DD純日期,無時區概念
TIME3-838:59:59 ~ 838:59:59HH:MM:SS可表達持續時間,非時刻
YEAR11901 ~ 2155YYYY年份專用,極度省空間
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS無時區轉換,靜態時間點
TIMESTAMP41970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTCYYYY-MM-DD HH:MM:SS自帶時區轉換,預設值可為 CURRENT_TIMESTAMP

選型決策樹:

  • 需時區感知、自動記錄建立/更新時間 → TIMESTAMP
  • 歷史日期、出生日期、無時區業務 → DATE / DATETIME
  • 年份維度統計、歸檔 → YEAR

三、字串類型:從定長到大物件的完整譜系

類型最大長度儲存特性適用場景
CHAR(n)255 字元定長,右側空格填充,不儲存尾部空格MD5 雜湊、ISO 代碼、固定長度代碼
VARCHAR(n)65,535 字元(共享 64KB 上限)變長,實際長度+1~2 位元組前綴使用者名稱、郵件、動態長度文字
TINYTEXT255 字元無長度前綴,離頁儲存極短備註、標籤
TEXT64 KB離頁儲存,需 2 位元組長度前綴文章內容、描述文案
MEDIUMTEXT16 MB離頁儲存,需 3 位元組長度前綴長文檔、日誌內容
LONGTEXT4 GB離頁儲存,需 4 位元組長度前綴巨大文本、JSON 文檔

CHAR vs VARCHAR 核心差異:

  • CHAR 固定佔用 n * 字元集位元組,UTF8MB4 下 CHAR(20) 佔 80 位元組
  • VARCHAR 僅佔用 實際長度 + 1~2 位元組,但需額外 CPU 處理長度前綴
  • 高頻更新欄位傾向 CHAR 避免碎片;讀多寫少、長度變動大傾向 VARCHAR

四、複合類型:ENUM 與 SET 的工程化應用

ENUM(單選集合)

  • 最多 65,535 個元素,內部以 1~2 位元組整數儲存索引值
  • 插入非定義值會存入空字串(索引 0),便於 WHERE enum_col = '' 掃描髒資料
  • 適用:性別、訂單狀態、付款方式等互斥、有限、穩定的分類

SET(多選集合)

  • 最多 64 個元素,內部以位元組合儲存(位掩碼)
  • 自動去重、忽略非法元素,FIND_IN_SET() 支援高效查詢
  • 適用:文章標籤、使用者權限、多屬性標記等非互斥、組合靈活的場景

五、高效能資料庫設計三步走原則

  1. 大類鎖定:依業務語義決定數值/日期/字串/二進位大類
  2. 精準定型:在滿足業務範圍前提下,選擇最小儲存空間的具體類型
  3. 屬性加持:必要時添加 UNSIGNED、NOT NULL、DEFAULT、COMMENT 等約束

黃金法則: 「能用 TINYINT 就不用 SMALLINT,能用 CHAR 就不用 VARCHAR,能用 DATE 就不用 DATETIME」。在滿足業務彈性的前提下,越小越快、越簡單越穩定。

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