MySQL 提供豐富的資料類型,合理選型直接影響儲存效率、查詢效能與應用正確性。本文將五大核心類型——字串、文本、數值、邏輯、日期——逐一拆解,對比易混淆類型,提供選型建議。
| 特性 | CHAR(N) | VARCHAR(N) |
|---|---|---|
| 儲存方式 | 固定長度,不足右側填空格 | 可變長度,實際長度+1~2 位元組長度前綴 |
| 最大長度 | 255 字元 | 65,535 位元組(受行大小限制) |
| 取出長度 | 永遠為 N | 實際資料長度 |
| 空間效率 | 低(固定佔用) | 高(按實際佔用) |
| 適合場景 | 長度固定、頻繁更新的短碼(如 MD5、ISO 代碼) | 長度變動大、佔多數的業務欄位 |
實務建議:現代應用優先用
VARCHAR,避免TRIM()處理尾部空格,節省儲存與網路傳輸。
TINYTEXT (255 B)、TEXT (64 KB)、MEDIUMTEXT (16 MB)、LONGTEXT (4 GB)| 類型 | 位元組 | 有號範圍 | 無號範圍 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 |
原則:能用小的就用小的。百萬級用戶表 INT UNSIGNED 足矣;狀態碼用 TINYINT。
DECIMAL(M, D) —— M 總位數(精度),D 小數位數(標度)DECIMAL(19,4) 或 BIGINT 存分/厘BIT(1) 儲存 0/1,底層為位元BOOLEAN 為 TINYINT(1) 別名,TRUE=1、FALSE=0ALTER TABLE ADD COLUMN 新增 BIT 欄位| 類型 | 位元組 | 範圍 | 精度 | 時區感知 |
|---|---|---|---|---|
| DATETIME | 8 | 1000-01-01 ~ 9999-12-31 | 秒 | 否 |
| TIMESTAMP | 4 | 1970-01-01 ~ 2038-01-19 | 秒 | 是(儲存 UTC,顯示轉換) |
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | 天 | 否 |
| TIME | 3 | -838:59:59 ~ 838:59:59 | 秒 | 否 |
| YEAR | 1 | 1901 ~ 2155 | 年 | 否 |
選型指南:
• 需時區自動換算(如全球用戶建立時間)→TIMESTAMP
• 歷史/未來日期、生日、排程 →DATETIME或DATE
• 5.6.4+ 支援DATETIME(6)微秒精度
正確的資料類型是高效能、低維護成本資料庫的基石。