MySQL 提供多種整數類型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),各自佔用空間與取值範圍不同。正確選型不僅能節省儲存空間,還能提升索引效能。本文彙整官方規格並給出實戰建議。
| 類型 | 儲存空間 | 有號範圍 | 無號範圍 |
|---|---|---|---|
| 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 / INTEGER | 4 Bytes | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 Bytes | -9.22E18 ~ 9.22E18 | 0 ~ 1.84E19 |
主鍵、外鍵、自增欄位永不為負,加上 UNSIGNED 可在相同空間下將正向範圍擴大一倍,且不增加儲存開銷。
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
TRUE=1、FALSE=0,非零即真。TINYINT(1)、TINYINT(4) 儲存空間、範圍完全相同,括號內數字僅作為客戶端顯示寬度提示(如 ZEROFILL 填零),不限制實際存值。
TINYINT UNSIGNEDSMALLINT UNSIGNEDMEDIUMINT UNSIGNED 或 INT UNSIGNEDBIGINT UNSIGNEDINT(11) 與 INT 效能、儲存無差異,僅影響部分 GUI 工具顯示,建議直接寫 INT 保持簡潔。
合理選型是資料庫設計的基礎功夫,能從源頭減少磁碟 I/O、縮小索引體積、加快查詢速度。建議在建表腳本中明確標註 UNSIGNED,並以 CHECK 條件或應用層驗證確保資料不超界。