| 類型 | 儲存 | 無符號範圍 | 典型用途 |
|---|---|---|---|
| 1B | 0~255 | 年齡、狀態碼、布林旗標 | |
| 2B | 0~65,535 | 技能值、小型字典 ID | |
| 3B | 0~16.7M | 中型表自增主鍵(省 1B vs INT) | |
| 4B | 0~4.29B | 通用主鍵、大型字典 | |
| 8B | 0~1.84E19 | 分散式 ID、超大表主鍵 |
案例:1600 萬列表用 MEDIUMINT 替代 INT 節省 ~16MB 空間。
DECIMAL(M,D) / NUMERIC 以字串形式逐位儲存,**精確無誤差**,適合價格、金額、匯率。儲存開銷:M+2 bytes(含小數點、符號)。
FLOAT (4B) ~ 1.17E-38 精度。DOUBLE (8B) ~ 2.22E-308 精度。| 類型 | 範圍 | 儲存 | 選型建議 |
|---|---|---|---|
DATE | 1000-01-01 ~ 9999-12-31 | 3B | 純日期(生日、入職日) |
TIME | -838:59:59 ~ 838:59:59 | 3B | 純時間(排班、耗時) |
DATETIME | 1000 ~ 9999 年 | 8B | 通用業務時間戳 |
TIMESTAMP | 1970 ~ 2038 年 | 4B | 自動更新欄位、跨時區應用 |
YEAR | 1901 ~ 2155 | 1B | 年份維度表 |
| 類型 | 儲存方式 | 適用場景 |
|---|---|---|
CHAR(N) | 固定 N bytes,不足右補空格 | 長度極固定:股票代碼(6)、MD5(32)、UUID(36) |
VARCHAR(N) | 實際長度 + 1~2 bytes 長度前綴 | 長度變動:姓名、地址、標題 |
決策公式:若 **平均長度 > N - 1** → 用 CHAR;否則 VARCHAR。
案例:股票名稱多為 4 字 (8B) → CHAR(8);代碼滬 6 位/深 4 位,滬市佔多數 → CHAR(6) 勝過 VARCHAR(6)。
| 類型 | 最大長度 | 額外開銷 |
|---|---|---|
TINYTEXT/BLOB | 255 B | +1B |
TEXT/BLOB | 64 KB | +2B |
MEDIUMTEXT/BLOB | 16 MB | +3B |
LONGTEXT/BLOB | 4 GB | +4B |
論壇貼文、文章正文:依預估長度由小到大選型,避免過度分配。
ENUM('A','B','C'):單選,1~2 bytes,直接用字串寫入 'A'。SET('A','B','C'):多選,1~8 bytes,位元組合存儲。案例:性別 ENUM('帥哥','美眉') 1 byte,比 TINYINT 更語義化、防呆。
MEDIUMINT/INT AUTO_INCREMENT,分散式用 BIGINT + Snowflake。DECIMAL(10,2) 或 DECIMAL(19,4)。DATETIME,審計/版本戳 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。CHAR,變長用 VARCHAR,大文本分級選 TEXT 族。ENUM/SET 替代查表關聯,極致節省空間與 Join 成本。utf8mb4,COLLATE utf8mb4_unicode_ci。