MySQL 資料類型詳解:選型原則與避坑指南
正確選擇資料類型是高效能的基石。本文依據《高效能 MySQL》三大原則,系統梳理數值、字符串、日期時間、二進制類型細節。
三大選型原則
- 越小越好:能正確存儲的前提下,選占用空間最小的類型。
- 越簡單越好:簡單類型(整數、定長)CPU 運算更少。
- 盡量避免 NULL:NULL 列增加索引、統計、比較複雜度,查詢優化更難。
1. 整數類型
| 類型 | 儲存 | 有符號範圍 | 無符號範圍 |
| TINYINT | 1 Byte | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 Bytes | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 Bytes | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 Bytes | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 Bytes | ±9.22×10¹⁸ | 0 ~ 1.84×10¹⁹ |
注意:INT(11) 中的 11 僅為顯示寬度,不影響儲存範圍。INT(1) 與 INT(20) 磁盤佔用相同。
2. 浮點與定點數
| 類型 | 精度 | 儲存 | 說明 |
| FLOAT(m,d) | 單精度 (~7 位) | 4 Bytes | 近似值,科學計算適用 |
| DOUBLE(m,d) | 雙精度 (~15 位) | 8 Bytes | 近似值,精度要求高時用 |
| DECIMAL(m,d) | 精確 | 變長 (≈ m/2 Bytes) | 精確值,財務/金額必選 |
DECIMAL(18,9):小數點前後各 9 位,共 9 Bytes(4+1+4)。
大數據量時可考慮 BIGINT 存儲「分」單位整數替代 DECIMAL。
3. 字符串類型
| 類型 | 最大長度 | 儲存方式 | 適用場景 |
| CHAR(n) | 255 字符 | 定長,右補空格 | 固定長度(MD5、UUID、國籍代碼) |
| VARCHAR(n) | 65,535 字符 | 變長,實際長度+1/2 Bytes | 可變長度,通用首選 |
| TINYTEXT | 255 字符 | 變長,+2 Bytes | 極短文本 |
| TEXT | 65,535 字符 | 變長,+2 Bytes | 較長文本 |
| MEDIUMTEXT | 16,777,215 | 變長,+3 Bytes | 長文本 |
| LONGTEXT | 4,294,967,295 | 變長,+4 Bytes | 超長文本 |
關鍵差異:
- CHAR 尾部空格會被截斷,VARCHAR 保留。
- CHAR 定長便於索引,但浪費空間;VARCHAR 節省空間,需額外長度前綴。
- TEXT 不能有 DEFAULT 值;建索引需指定前綴長度;查詢速度通常慢於 VARCHAR。
4. 二進制類型 (BLOB)
| 類型 | 最大長度 |
| TINYBLOB | 255 Bytes |
| BLOB | 65,535 Bytes |
| MEDIUMBLOB | 16,777,215 Bytes |
| LONGBLOB | 4,294,967,295 Bytes |
- BLOB 二進制存儲,不分大小寫;TEXT 文本存儲,分大小寫。
- BLOB 只能整體讀寫;TEXT 可指定字符集。
5. 日期時間類型
| 類型 | 範圍 | 儲存 | 特性 |
| DATE | 1000-01-01 ~ 9999-12-31 | 3 Bytes | 僅日期 |
| TIME | -838:59:59 ~ 838:59:59 | 3 Bytes | 僅時間 |
| DATETIME | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 Bytes | 日期+時間,無時區 |
| TIMESTAMP | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4 Bytes | 自動更新(預設 ON UPDATE CURRENT_TIMESTAMP),帶時區轉換 |
選擇建議:需時區感知或自動記錄修改時間用 TIMESTAMP;其餘用 DATETIME(範圍更大、無 2038 年問題)。
6. 常用屬性關鍵字
NULL / NOT NULL
DEFAULT value
PRIMARY KEY
AUTO_INCREMENT(整數類型)
UNSIGNED(無符號,範圍翻倍)
CHARACTER SET charset_name
- 上一篇文章: MySQL 安裝常見錯誤匯總與解決方案(Windows)
- 下一篇文章: MySQL 數學函數完整參考指南(附範例)
Copyright ©
程式碼之家 All Rights Reserved