| 類型 | 存儲 | 無符號範圍 | 有符號範圍 |
|---|---|---|---|
| TINYINT | 1 字節 | 0 ~ 255 | -128 ~ 127 |
| SMALLINT | 2 字節 | 0 ~ 65535 | -32768 ~ 32767 |
| MEDIUMINT | 3 字節 | 0 ~ 16777215 | -8388608 ~ 8388607 |
| INT | 4 字節 | 0 ~ 4294967295 | -2147483648 ~ 2147483647 |
| BIGINT | 8 字節 | 0 ~ 18446744073709551615 | -9223372036854775808 ~ 9223372036854775807 |
INT(11) 中的寬度僅影響顯示,不限制存儲範圍,INT(1) 與 INT(20) 存儲計算完全相同。
| 類型 | 存儲 | 格式 | 範圍 |
|---|---|---|---|
| DATETIME | 8 字節 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
| TIMESTAMP | 4 字節 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 |
| DATE | 3 字節 | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 |
| YEAR | 1 字節 | YYYY | 1901 ~ 2155 |
TIMESTAMP 特性:INSERT/UPDATE 時自動填充/更新為 CURRENT_TIMESTAMP。顯示值依賴時區;DATETIME 與時區無關。
| 類型 | 存儲 | 格式 | 範圍 |
|---|---|---|---|
| TIME | 3 字節 | HH:MM:SS | -838:59:59 ~ 838:59:59 |
範圍超過 24 小時是為了支持兩個日期時間相減(如 TIMEDIFF 可得負值)。
SELECT TIMEDIFF('2000-01-31 23:59:59', '2000-01-01 00:00:00'); -- 743:59:59
SELECT TIMEDIFF('2000-01-01 00:00:00', '2000-01-31 23:59:59'); -- -743:59:59
SELECT TIMEDIFF('23:59:59', '12:00:00'); -- 11:59:59
注意:兩參數類型必須一致(均為 DATETIME/TIMESTAMP 或均為 TIME)。
MySQL 5.6 之前僅支持秒級,不支持毫秒/微秒,亦無產生毫秒的函數。