無論免費空間還是電商大站,合理設計表結構、充分利用空間都是必修課。核心原則:夠用就好,越小越好。
| 型別 | 儲存空間 | 無符號最大值 | 適用場景 |
|---|---|---|---|
| TINYINT | 1 Byte | 255 | 年齡、狀態碼、布林替代 |
| SMALLINT | 2 Bytes | 65,535 | 遊戲技能值、中小型表自增 ID |
| MEDIUMINT | 3 Bytes | 16,777,215 | 千萬級表自增 ID(省 1 Byte/行) |
| INT | 4 Bytes | 4,294,967,295 | 通用自增 ID、外鍵引用 |
| BIGINT | 8 Bytes | 18,446,744,073,709,551,615 | 極大數據量、分布式 ID |
範例:1600 萬行表用 MEDIUMINT 代替 INT,節省 ~16MB 空間。
DECIMAL(10,2) 共 10 位,小數 2 位| 型別 | 空間 | 最小絕對值 | 適用性 |
|---|---|---|---|
| FLOAT | 4 Bytes | ~1.17E-38 | 民用極少用到 |
| DOUBLE | 8 Bytes | ~2.22E-308 | 科學計算、極高精度需求 |
作者從未在實務中使用過 FLOAT/DOUBLE,民用場景建議改用 DECIMAL。
| 型別 | 空間 | 範圍 | 適用場景 |
|---|---|---|---|
| DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | 純日期(生日、入職日) |
| TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | 純時間(工時、時長) |
| DATETIME | 8 Bytes | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 通用日期時間(訂單時間) |
| TIMESTAMP | 4 Bytes | 1970-01-01 ~ 2038-01-19 | 自動更新時間戳、跨時區應用 |
| YEAR | 1 Byte | 1901 ~ 2155 | 年份欄位 |
只需日期用 DATE,只需時間用 TIME,通用用 DATETIME,需時區感知用 TIMESTAMP。
| 型別 | 特性 | 空間計算 | 適用場景 |
|---|---|---|---|
| CHAR(N) | 固定長度 | N Bytes | 長度固定(MD5、UUID、國碼) |
| VARCHAR(N) | 可變長度 | 實際長度 + 1 Byte | 長度不固定(姓名、標題、地址) |
| TEXT | 長文本 | 資料長度 + 2 Bytes | 文章內容、描述、JSON |
CHAR(6);股票名稱不定長 → VARCHAR(20)INT UNSIGNED AUTO_INCREMENT,預估超 40 億用 BIGINTDECIMAL(12,2) 或 DECIMAL(10,4)TINYINT UNSIGNED + 字典表/ENUMDATETIME(業務時間)+ TIMESTAMP(創建/更新自動維護)VARCHAR,固定碼用 CHAR,長文本用 TEXTutf8mb4,排序規則 utf8mb4_unicode_ci