掌握 MySQL 資料類型是資料庫設計、效能優化與避免資料截斷的基石。本文系統整理四大類資料類型、欄位定義語法、屬性修飾符與實戰選型建議。
支援科學記號(如 1.24E+12,指數前須有正負號)、負號、整數與浮點數。
| 類型 | 儲存空間 | 範圍 (有號/無號) | 適用場景 |
|---|---|---|---|
TINYINT | 1 Byte | -128~127 / 0~255 | 布林旗標、極小範圍計數 |
SMALLINT | 2 Bytes | -32,768~32,767 / 0~65,535 | 小範圍整數 |
MEDIUMINT | 3 Bytes | -8.3M~8.3M / 0~16.7M | 中等整數,節省空間 |
INT | 4 Bytes | -21億~21億 / 0~42億 | 通用整數主鍵 |
BIGINT | 8 Bytes | 極大範圍 | 極大數值、雪花算法 ID |
FLOAT | 4 Bytes | 單精度浮點數 | 科學計算、近似值 |
DOUBLE | 8 Bytes | 雙精度浮點數 | 高精度科學計算 |
DECIMAL(M,D) | M+2 Bytes | 精確定點數 | 金額、價格、精確計算必用 |
BIT | ~M/8 Bytes | 位元值 | 位元遮罩、旗標組合 |
關鍵區別:DECIMAL為精確定點數,FLOAT/DOUBLE為近似浮點數。金融、金額計算嚴禁使用浮點數。
單雙引號皆可包裹。關鍵區別:數值型參與計算,字串型不參與計算(如電話號碼、門牌號)。
| 類型 | 最大長度 | 儲存特性 | 適用場景 |
|---|---|---|---|
CHAR(N) | 255 字符 | 定長,右側填充空格 | 固定長度:MD5、UUID、國籍代碼 |
VARCHAR(N) | 65,535 字符 | 變長,需 1-2 字節記錄長度 | 通用變長字串:姓名、標題、描述 |
TINYTEXT | 255 字符 | 不支援 DEFAULT | 短文本 |
TEXT | 65,535 字符 | 離頁儲存 | 文章內容、長文本 |
MEDIUMTEXT | 16,777,215 | 離頁儲存 | 大型文本 |
LONGTEXT | 4,294,967,295 | 離頁儲存 | 超大文本 |
BLOB 系列 | 對應 TEXT 等級 | 二進制資料 | 圖片、檔案、序列化物件 |
ENUM | 65,535 成員 | 內部整數儲存,極高效 | 固定集合:性別、狀態、類別 |
SET | 64 成員 | 位元組合儲存 | 多選標籤、權限位元組 |
| 類型 | 儲存空間 | 範圍 | 格式 | 特性 |
|---|---|---|---|---|
DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 純日期 |
TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | HH:MM:SS | 時間/持續時間 |
DATETIME | 8 Bytes (5.6.4+) | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期時間,無時區 |
TIMESTAMP | 4 Bytes | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | YYYY-MM-DD HH:MM:SS | 自動時區轉換,受 2038 年限制 |
YEAR | 1 Byte | 1901 ~ 2155 | YYYY | 僅年份,8.0 棄用 YEAR(2) |
表示「未知」或「不存在」,非空字串、非零。NULL != ''、NULL != 0、NULL = NULL 為 UNKNOWN。
設計建議: 能用 NOT NULL 就不用 NULL;必要時用預設值替代。
col_name col_type [col_attributes] [GENERAL_ATTRIBUTES]
SELECT、DELETE 等),函數名(MIN、MAX)可用UNSIGNED:整數/浮點數無號,範圍翻倍ZEROFILL:左側補零(隱含 UNSIGNED)BINARY:CHAR/VARCHAR 二進制比較,區分大小寫CHARACTER SET charset、COLLATE collation:指定字符集與排序規則NULL / NOT NULL:是否允許空值DEFAULT value:預設值(常數,不可為函數或引用其他欄位)AUTO_INCREMENT:整數自增(通常用於主鍵)UNIQUE [KEY]、PRIMARY KEY:約束COMMENT 'string':欄位註釋INT 系,金額用 DECIMAL(10,2),科學計算用 DOUBLECHAR(N) 或 BINARY(N)VARCHAR(N)(N 為業務最大長度)TEXT 系BLOB 系(建議存檔案路徑而非內容)ENUMSET 或關聯表DATETIME,需時區轉換用 TIMESTAMP,長期專案避開 2038 問題VARCHAR(255) 濫用:實際只需 20 字符卻設 255,浪費索引空間、緩存、排序記憶體TEXT 用於短字串:無法建立完整索引、無法使用 DEFAULT、離頁儲存增加 I/OFLOAT 存金額:精度誤差導致對帳失衡INT(11) 誤以為限制長度:括號內數字僅為顯示寬度,不影響儲存範圍