資料類型是資料庫效能與儲存效率的基石。正確選型不僅能節省空間,更能大幅提升查詢速度。本文系統梳理 MySQL 五大類別資料類型的儲存特性、適用場景與避坑指南,助您做出最優決策。
MySQL 提供 5 種標準整數類型,儲存範圍呈指數級增長:
| 類型 | 儲存位元組 | 有號範圍 | 無號範圍 (UNSIGNED) | 典型應用 |
|---|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | 年齡、狀態碼、布林替代 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 | 郵遞區號、小型計數器 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 | 中等量級 ID、顏色 RGB 值 |
| INT / INTEGER | 4 | -2.14B ~ 2.14B | 0 ~ 4.29B | 通用主鍵、外鍵、計數器 |
| BIGINT | 8 | -9.22E18 ~ 9.22E18 | 0 ~ 1.84E19 | 大數據主鍵、時間戳毫秒值 |
關鍵認知: 括號內的顯示寬度(如 INT(11))不影響儲存範圍,僅影響 ZEROFILL 時的前導零填充行為。MySQL 8.0 已棄用整數顯示寬度語法。
| 類型 | 精度 | 儲存位元組 | 適用場景 |
|---|---|---|---|
| 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。
| 類型 | 儲存位元組 | 範圍 | 格式 | 核心差異 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 純日期,無時區概念 |
| TIME | 3 | -838:59:59 ~ 838:59:59 | HH:MM:SS | 可表達持續時間,非時刻 |
| YEAR | 1 | 1901 ~ 2155 | YYYY | 年份專用,極度省空間 |
| DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 無時區轉換,靜態時間點 |
| TIMESTAMP | 4 | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | YYYY-MM-DD HH:MM:SS | 自帶時區轉換,預設值可為 CURRENT_TIMESTAMP |
選型決策樹:
TIMESTAMPDATE / DATETIMEYEAR| 類型 | 最大長度 | 儲存特性 | 適用場景 |
|---|---|---|---|
| CHAR(n) | 255 字元 | 定長,右側空格填充,不儲存尾部空格 | MD5 雜湊、ISO 代碼、固定長度代碼 |
| VARCHAR(n) | 65,535 字元(共享 64KB 上限) | 變長,實際長度+1~2 位元組前綴 | 使用者名稱、郵件、動態長度文字 |
| TINYTEXT | 255 字元 | 無長度前綴,離頁儲存 | 極短備註、標籤 |
| TEXT | 64 KB | 離頁儲存,需 2 位元組長度前綴 | 文章內容、描述文案 |
| MEDIUMTEXT | 16 MB | 離頁儲存,需 3 位元組長度前綴 | 長文檔、日誌內容 |
| LONGTEXT | 4 GB | 離頁儲存,需 4 位元組長度前綴 | 巨大文本、JSON 文檔 |
CHAR vs VARCHAR 核心差異:
n * 字元集位元組,UTF8MB4 下 CHAR(20) 佔 80 位元組實際長度 + 1~2 位元組,但需額外 CPU 處理長度前綴WHERE enum_col = '' 掃描髒資料FIND_IN_SET() 支援高效查詢UNSIGNED、NOT NULL、DEFAULT、COMMENT 等約束黃金法則: 「能用 TINYINT 就不用 SMALLINT,能用 CHAR 就不用 VARCHAR,能用 DATE 就不用 DATETIME」。在滿足業務彈性的前提下,越小越快、越簡單越穩定。