註:以下內容針對 MySQL 5.0 及以上版本
MySQL 支援的數據類型非常豐富,選擇正確的數據類型對於獲得高性能至關重要。本文結合網上技術博客與《高性能 MySQL》一書內容整理而成,旨在幫助開發者做出最優選擇。
MySQL 主要支援三大類數據類型:數字類型、字符串類型 和 日期時間類型。
數字類型整體可分為整數型和浮點型兩大類。
| 類型 | 儲存空間 | 有符號範圍 |
|---|---|---|
| TINYINT | 1 字節 | -128 ~ 127 |
| SMALLINT | 2 字節 | -32,768 ~ 32,767 |
| MEDIUMINT | 3 字節 | -8,388,608 ~ 8,388,607 |
| INT | 4 字節 | -2,147,483,648 ~ 2,147,483,647 |
| BIGINT | 8 字節 | ±9.22×10¹⁸ |
關鍵點:
UNSIGNED 後,最大值翻倍(如 TINYINT UNSIGNED 為 0~255)。INT(M) 中的 M 只是顯示寬度,不影響實際儲存範圍。INT(1) 與 INT(20) 在儲存與計算上完全相同。| 類型 | 精度 | 儲存空間 | 說明 |
|---|---|---|---|
| FLOAT(M,D) | 單精度(約 7 位有效數字) | 4 字節 | M 為總位數,D 為小數位數 |
| DOUBLE(M,D) | 雙精度(約 15 位有效數字) | 8 字節 | M 為總位數,D 為小數位數 |
範例: 定義 FLOAT(5,3),插入 123.45678 實際儲存為 123.457(四捨五入),但總位數按實際計算。
DECIMAL(M,D):M < 65 為總位數,D < 30 且 D < M 為小數位數。
BIGINT 替代(存儲分為單位的整數)。| 類型 | 長度特性 | 最大長度 |
|---|---|---|
| CHAR(N) | 固定長度 | 255 字符 |
| VARCHAR(N) | 變長 | 65,535 字符 |
| TINYTEXT | 變長 | 255 字符 |
| TEXT | 變長 | 65,535 字符 |
| MEDIUMTEXT | 變長 | 16,777,215 字符 |
| LONGTEXT | 變長 | 4,294,967,295 字符 |
CHAR(N):不足 N 字符以空格補齊,查詢時去除尾部空格;尾部不能有空格。固定佔用 N 字節。VARCHAR(N):實際佔用「字符數 + 1~2 字節」(長度前綴)。| 類型 | 格式範例 | 說明 |
|---|---|---|
| DATE | '2008-12-02' | 日期 |
| TIME | '12:25:36' | 時間 |
| DATETIME | '2008-12-02 22:06:44' | 日期時間 |
| TIMESTAMP | 自動記錄修改時間 | 隨記錄修改自動刷新,適合記錄最後修改時間 |
| 關鍵字 | 含義 |
|---|---|
| NULL / NOT NULL | 允許/禁止 NULL 值 |
| DEFAULT | 預設值 |
| PRIMARY KEY | 主鍵 |
| AUTO_INCREMENT | 自動遞增(適用整數類型) |
| UNSIGNED | 無符號 |
| CHARACTER SET name | 指定字符集 |
| 名稱 | 長度(字節) | 用法/範圍說明 |
|---|---|---|
| TINYINT | 1 | 無符號 0~255,有符號 -128~127 |
| SMALLINT | 2 | 無符號 0~65535,有符號 -32768~32767 |
| MEDIUMINT | 3 | 無符號 0~16777215,有符號 -8388608~8388607 |
| INT | 4 | 無符號 0~4294967295,有符號 -2147483648~2147483647 |
| BIGINT | 8 | 無符號 0~18446744073709551615 |
| FLOAT | 4 | 單精度浮點數 |
| DOUBLE | 8 | 雙精度浮點數 |
| DECIMAL(M,D) | M+1 或 M+2 | 未打包浮點數(精確計算) |
| DATE | 3 | YYYY-MM-DD |
| DATETIME | 8 | YYYY-MM-DD HH:MM:SS |
| TIMESTAMP | 4 | YYYY-MM-DD HH:MM:SS |
| TIME | 3 | HH:MM:SS |
| YEAR | 1 | YYYY |
| CHAR(M) | M | 定長字符串 |
| VARCHAR(M) | L+1 或 L+2 | 變長字符串 (L 為實際長度) |
| TINYBLOB/TEXT | L+1 | 最大 255 字節 |
| BLOB/TEXT | L+2 | 最大 64KB |
| MEDIUMBLOB/TEXT | L+3 | 最大 16MB |
| LONGBLOB/TEXT | L+4 | 最大 4GB |
| ENUM | 1 或 2 | 最多 65535 個不同值 |
| SET | 1~8 | 最多 64 個不同值 |
總結: 依據業務場景選擇最小、最簡單、避免 NULL 的類型,是資料庫高效能設計的基石。