MySQL 提供豐富的資料類型以滿足不同業務場景需求,合理選擇資料類型是資料庫設計效能優化的基石。本文系統整理 MySQL 主要資料類型分類、特性與適用場景,並附上官方文件圖示供參考。

| 類型 | 大小 (Bytes) | 範圍 (有符號) | 範圍 (無符號) | 適用場景 |
|---|---|---|---|---|
| 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 | 中等範圍整數、IPv4 地址儲存 |
| INT / INTEGER | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 通用整數、主鍵自增 ID |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 | 大整數、高併發主鍵、時間戳毫秒 |
| FLOAT | 4 | ±3.4e38 (約 7 位有效數字) | - | 單精度浮點、科學計算近似值 |
| DOUBLE | 8 | ±1.7e308 (約 15 位有效數字) | - | 雙精度浮點、精密科學計算 |
| DECIMAL(M,D) | M+2 | 精確定點數,取決於 M、D | - | 金融金額、精確計算、避免浮點誤差 |
| BIT(M) | ~M/8 | 位域值 | - | 位元標誌、權限掩碼 |
| 類型 | 大小 | 範圍 | 格式 | 特性 |
|---|---|---|---|---|
| DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 純日期,無時區 |
| TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | HH:MM:SS | 時間間隔或一天內時間 |
| DATETIME | 8 Bytes | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期時間組合,無時區轉換 |
| TIMESTAMP | 4 Bytes | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | YYYY-MM-DD HH:MM:SS | 自動時區轉換,支援自動初始化/更新 |
| YEAR | 1 Byte | 1901 ~ 2155 | YYYY | 僅儲存年份 |
建議:優先使用 TIMESTAMP 儲存業務時間(4 Bytes、自動時區、自動更新),跨時區應用必選;需儲存 2038 年後日期或不想要時區轉換時用 DATETIME。
| 類型 | 最大長度 | 儲存特性 | 適用場景 |
|---|---|---|---|
| CHAR(M) | 0 ~ 255 Bytes | 定長,右側填充空格 | 固定長度代碼(如 ISO 國家碼、MD5 雜湊) |
| VARCHAR(M) | 0 ~ 65,535 Bytes | 變長,1-2 Bytes 儲存長度 | 通用變長字串(姓名、標題、URL) |
| TINYTEXT | 255 Bytes | 變長,不可有 DEFAULT | 極短文本 |
| TEXT | 64 KB | 變長 | 文章內容、描述、JSON 文本 |
| MEDIUMTEXT | 16 MB | 變長 | 長文本、日誌 |
| LONGTEXT | 4 GB | 變長 | 超大文本、完整文檔 |
| BINARY / VARBINARY | 同 CHAR/VARCHAR | 二進位位元組,無字符集 | 檔案雜湊、加密資料、大小寫敏感比對 |
| BLOB 系列 | 同 TEXT 系列 | 二進位大物件 | 圖片、檔案、序列化物件 |
| ENUM | 65,535 個元素 | 內部儲存為整數索引 | 固定枚舉值(狀態、類型、性別) |
| SET | 64 個成員 | 位掩碼儲存 | 多選標籤、權限集合 |
INT UNSIGNED,狀態碼用 TINYINT,避免字串比較開銷。FLOAT/DOUBLE 儲存金額,必選 DECIMAL(19,4) 或按分儲存 BIGINT。VARCHAR + 前綴索引或全文索引。掌握資料類型特性,結合業務實際場景選型,是打造高效能、易維護 MySQL 資料庫的關鍵第一步。