MySQL 數據類型深度解析:數值、字符串、日期時間、NULL 值全維度詳解
系統梳理 MySQL 列類型體系:數值類型(整數/浮點/定點)、字符串類型(定長/可變長/二進制/文本/枚舉/集合)、日期時間類型、NULL 語義,附存儲需求、範圍、選型建議。
一、數值類型
1. 整數類型
| 類型 | 存儲 | 有符號範圍 | 無符號範圍 |
| TINYINT | 1B | -128~127 | 0~255 |
| SMALLINT | 2B | -32768~32767 | 0~65535 |
| MEDIUMINT | 3B | -8388608~8388607 | 0~16777215 |
| INT | 4B | -2147483648~2147483647 | 0~4294967295 |
| BIGINT | 8B | -9.22e18~9.22e18 | 0~1.84e19 |
屬性:UNSIGNED(禁負、翻倍正數)、ZEROFILL(前導零填充)、AUTO_INCREMENT(自增、配合主鍵/唯一鍵)。
2. 浮點/定點類型
| 類型 | 存儲 | 精度 | 範圍 |
| FLOAT | 4B | ~7位 | ±1.17E-38 ~ ±3.40E+38 |
| DOUBLE | 8B | ~15位 | ±2.22E-308 ~ ±1.79E+308 |
| DECIMAL(M,D) | M+2B | 精確D位 | 依賴M,D |
金額必用 DECIMAL,避免浮點誤差。
二、字符串類型
1. 定長/可變長
| 類型 | 最大長度 | 存儲 | 特點 |
| CHAR(M) | 255B | M字節 | 定長,右補空格,檢索去空格 |
| VARCHAR(M) | 65535B | L+1/2字節 | 可變長,最常用 |
2. 二進制/文本大對象
| 類型 | 最大長度 | 存儲 | 備註 |
| TINYBLOB/TEXT | 255B | L+1B | |
| BLOB/TEXT | 64KB | L+2B | |
| MEDIUMBLOB/TEXT | 16MB | L+3B | |
| LONGBLOB/TEXT | 4GB | L+4B | |
差異:BLOB 二進制、區分大小寫排序;TEXT 非二進制、不區分大小寫。BLOB/TEXT 無默認值、不可全長索引、臨時表落盤。
3. 枚舉與集合
| 類型 | 成員數 | 存儲 | 用法 |
| ENUM | 65535 | 1-2B | 單選,內部按索引存儲 |
| SET | 64 | 1-8B | 多選,位掩碼存儲 |
三、日期時間類型
| 類型 | 存儲 | 範圍 | 零值 | 特點 |
| DATE | 3B | 1000-01-01 ~ 9999-12-31 | 0000-00-00 | 標準日期 |
| TIME | 3B | -838:59:59 ~ 838:59:59 | 00:00:00 | 可存時長 |
| DATETIME | 8B | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 0000-00-00 00:00:00 | 無時區 |
| TIMESTAMP | 4B | 1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 | 0000-00-00 00:00:00 | **帶時區**,寫NULL自動取當前時間 |
| YEAR | 1B | 1901 ~ 2155 | 0000 | |
TIMESTAMP 顯示格式受 M 影響(TIMESTAMP(14) 完整、TIMESTAMP(8) 只日期等)。
四、NULL 值語義
- 非類型值:表示「未知/缺失/不適用」,非空字符串、非零數字。
- 運算傳播:任何與 NULL 運算結果為 NULL。
- 統計忽略:
COUNT(col) 不計 NULL,COUNT(*) 計行數。
- 索引:可索引 NULL 值(InnoDB/MyISAM 均支持)。
五、列類型屬性總結