設計資料表時,清楚掌握各資料型別的取值範圍對於儲存空間規劃與資料完整性至關重要。下表彙整 MySQL 常用數值、日期時間及字串型別的完整範圍,供開發參考。
| 型別 | 有號號範圍 | 無號範圍 (UNSIGNED) |
|---|---|---|
| TINYINT | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT / INTEGER | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
| 型別 | 範圍說明 |
|---|---|
| FLOAT | ±3.402823466E+38 ~ ±1.175494351E-38,含 0 |
| DOUBLE / DOUBLE PRECISION / REAL | ±1.7976931348623157E+308 ~ ±2.2250738585072014E-308,含 0 |
| DECIMAL(M,D) / NUMERIC(M,D) | M 為總位數(含小數點),D 為小數位數;M 預設 10,D 預設 0 |
| 型別 | 範圍 |
|---|---|
| DATE | 1000-01-01 ~ 9999-12-31 |
| DATETIME | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
| TIMESTAMP | 1970-01-01 00:00:00 ~ 2038 年某日 (32 位元限制) |
| TIME | -838:59:59 ~ 838:59:59 |
| YEAR[(2|4)] | 4 位元: 1901 ~ 2155、0000;2 位元: 70~69 (1970~2069) |
| 型別 | 最大長度 / 說明 |
|---|---|
| CHAR(M) / NCHAR(M) | M: 1~255,定長,不足補空格,讀取時尾部空格移除 |
| VARCHAR(M) / NATIONAL VARCHAR(M) | M: 1~255,變長,尾部空格自動移除 |
| TINYBLOB / TINYTEXT | 255 (2⁸-1) 字元 |
| BLOB / TEXT | 65,535 (2¹⁶-1) 字元 |
| MEDIUMBLOB / MEDIUMTEXT | 16,777,215 (2²⁴-1) 字元 |
| LONGBLOB / LONGTEXT | 4,294,967,295 (2³²-1) 字元 |
| ENUM('v1','v2',...) | 最多 65,535 個不同值 |
| SET('v1','v2',...) | 最多 64 個成員 |
提示:選擇型別時遵循「夠用就好」原則,避免過度使用大型別造成儲存浪費與效能損耗。