一、數值類型
| 類型 | 位元組 | 範圍(有符號) | 範圍(無符號) | 適用場景 |
| 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 | 中等整數 |
| INT / INTEGER | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 通用主鍵、計數器 |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 | 大量主鍵、時間戳毫秒 |
| FLOAT(M,D) | 4 | 約 ±1.17e-38 ~ ±3.40e38 | - | 單精度科學計算 |
| DOUBLE(M,D) | 8 | 約 ±2.22e-308 ~ ±1.79e308 | - | 雙精度科學計算 |
| DECIMAL(M,D) / NUMERIC | M/2+2 約略 | 精確至 D 位小數 | - | 財務、金額、精確計算 |
| BIT(M) | (M+7)/8 | 位域 | - | 位元組標誌 |
關鍵提醒: INT(11) 中的 11 僅為顯示寬度(ZEROFILL 時生效),不影響儲存範圍。無符號時範圍翻倍。
二、字串類型
| 類型 | 最大長度 | 儲存開銷 | 特性 |
| CHAR(M) | 255 字元 | M 位元組(定長) | 右側空格填充,適合固定長度(MD5、ISO 代碼) |
| VARCHAR(M) | 65,535 字元(共享 64KB 行上限) | L+1/2 位元組 | 變長,實際長度+1/2 字節長度前綴 |
| TINYTEXT | 255 字元 | L+1 | 不支援 DEFAULT、索引需指定前綴長度 |
| TEXT | 65,535 字元 | L+2 | 同上 |
| MEDIUMTEXT | 16,777,215 字元 | L+3 | 同上 |
| LONGTEXT | 4,294,967,295 字元 (4GB) | L+4 | 同上 |
| BLOB 系列 | 對應 TEXT 四檔 | 同 TEXT | 二進制字節,無字符集/校對規則,適合圖片、檔案 |
| ENUM | 65,535 個元素 | 1/2 位元組 | 單選,內部儲存為整數索引 |
| SET | 64 個成員 | 1/2/3/4/8 位元組 | 多選,位元組位標記 |
三、日期時間類型
| 類型 | 位元組 | 範圍 | 精度 | 備註 |
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | 天 | |
| TIME | 3 | -838:59:59 ~ 838:59:59 | 秒 | 可存時長、非單純時間點 |
| DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 秒 | 無時區感知,5.6.4+ 支援毫秒 DATETIME(3) |
| TIMESTAMP | 4 | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 秒 | 時區感知,自動轉換,5.6.4+ 支援毫秒 |
| YEAR | 1 | 1901 ~ 2155 | 年 | |
選型建議: 需時區轉換、自動更新 → TIMESTAMP;歷史日期、出生日期、無時區業務 → DATETIME。
四、空間類型 (MySQL 5.7+ / 8.0)
GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION
- 支援空間索引 (SPATIAL INDEX)、R-Tree、GIS 函數 (
ST_Distance, ST_Contains 等)
五、JSON 類型 (MySQL 5.7.8+)
- 原生二進制儲存,支援
JSON_EXTRACT, ->, ->>, JSON_ARRAY, JSON_OBJECT, JSON_MERGE 等函數
- 虛擬欄位索引:
CREATE INDEX idx_json ON t((json_col->>'$.key'))
- 文檔驗證:
JSON_VALID、JSON_SCHEMA_VALID (8.0.17+)
六、選型決策樹
- 整數 →
TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT(按範圍最小化)
- 精確小數 →
DECIMAL(M,D)
- 近似科學數值 →
FLOAT/DOUBLE
- 定長字串 →
CHAR
- 變長字串 →
VARCHAR(長度 < 256 用 TINYTEXT/TEXT 不如 VARCHAR 靈活)
- 大文本/二進制 →
TEXT/BLOB 系列
- 枚舉/集合 →
ENUM/SET(值集固定、少量)
- 日期時間 →
DATE/TIME/DATETIME/TIMESTAMP(按時區需求)
- 地理空間 →
GEOMETRY 系列
- 半結構化文檔 →
JSON