| 類型 | 存儲字節 | 有符號範圍 | 無符號範圍 | 典型場景 |
|---|---|---|---|---|
| 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 | 中等計數、IPv4 存儲 (INT UNSIGNED 更常用) |
| INT / INTEGER | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 通用主鍵、計數器、外鍵 |
| BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 | 海量主鍵、時間戳毫秒、雪花 ID |
提示:INT(N) 中的 N 僅影響顯示寬度 (配合 ZEROFILL),不限制存儲範圍。5.0.67+ 已棄用 ZEROFILL,建議應用層格式化。
DECIMAL(M, D) M=總位數(1~65),D=小數位數(0~30, D≤M)。| 剩餘位數 | 字節 |
|---|---|
| 0 | 0 |
| 1~2 | 1 |
| 3~4 | 2 |
| 5~6 | 3 |
| 7~9 | 4 |
DECIMAL(20,6) → 整數部 14 位 (5+9) 佔 3+4=7 字節,小數部 6 位佔 3 字節,共 10 字節。| 類型 | 字節 | 精度 | 範圍近似 | 適用性 |
|---|---|---|---|---|
| FLOAT(M,D) | 4 | ~7 位有效數字 | ±3.4E38 | 科學計算、非精確容差場景 |
| DOUBLE(M,D) | 8 | ~15 位有效數字 | ±1.7E308 | 雙精度科學計算 |
警告:浮點數存在精度誤差,嚴禁用於金融金額,務必用 DECIMAL。
| 類型 | 字節 | 範圍 | 精度 | 時區感知 | 典型用途 |
|---|---|---|---|---|---|
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | 天 | 否 | 生日、入職日期、業務日期 |
| TIME | 3 | -838:59:59 ~ 838:59:59 | 秒 (可微秒) | 否 | 時間段、每日定時、耗時統計 |
| YEAR | 1 | 1901 ~ 2155 (4位) | 年 | 否 | 年份維度統計 |
| DATETIME | 8 (5.6.4 前) | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 秒 (5.6.4+ 支持微秒) | 否 | 業務時間、日志記錄、不需時區轉換 |
| TIMESTAMP | 4 | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 秒 (5.6.4+ 支持微秒) | 是 (存儲 UTC,讀取按會話時區轉換) | 創建/更新時間戳、跨時區應用 |
TYPE_NAME(fsp),fsp=0~6。如 DATETIME(3) 毫秒級,TIMESTAMP(6) 微秒級。
函數同步支持:NOW(3)、CURTIME(6)、SYSDATE(3)。
| 類型 | 最大長度 | 存儲特點 | 適用場景 |
|---|---|---|---|
| CHAR(N) | 255 字符 | 定長,右填充空格至 N | 固定長度代碼、MD5、UUID、ISO 代碼 |
| VARCHAR(N) | 65,535 字節 (行上限共享) | 變長,1~2 字節長度前綴 + 實際內容 | 通用變長文本、姓名、地址、JSON 片段 |
| TEXT | 64 KB | 溢出頁存儲,不在行內 | 長文本、文章、日志詳情 |
| MEDIUMTEXT | 16 MB | 同上 | 較長文檔 |
| LONGTEXT | 4 GB | 同上 | 超大文本、基因序列 |
關鍵差異:CHAR(4) 存 'ab' 實際佔 4 字節 ('ab '),VARCHAR(4) 佔 3 字節 (長度 1 + 'ab')。CHAR 適合極短固定長度、高頻更新列 (避免行遷移)。
| 類型 | 對應字符類型 | 特點 |
|---|---|---|
| BINARY(N) | CHAR(N) | 定長,填充 0x00 |
| VARBINARY(N) | VARCHAR(N) | 變長,存儲字節流 |
| BLOB / TINYBLOB / MEDIUMBLOB / LONGBLOB | TEXT 系列 | 二進制大對象,存圖片、文件流、加密數據 |
比較語義:二進制類型按字節值比較,'5' = 0x35,'5\0\0' != '5' (BINARY 填充 0x00 導致不等)。
'a,b,a' 自動去重為 'a,b';非法元素被忽略 + Warning。FIND_IN_SET('a', set_col) 查詢包含關係。(M+7)/8 字節。SELECT BIN(bit_col+0) 可視化輸出。DECIMALTINYINT/SMALLINT/INT/BIGINT (按範圍最小化)TIMESTAMP,否則 DATETIME;僅日期用 DATE,僅時間段用 TIME。CHAR,變長用 VARCHAR,超長用 TEXT/BLOB。ENUM (單選) / SET (多選 ≤64) / BIT (多選 >64)。VARBINARY/BLOB。合理選擇數據類型是性能優化的基石:越小越好、越簡單越好、預留擴展但不浪費。定期用 PROCEDURE ANALYSE() 或 pt-table-checksum 掃描現有表,發現類型不匹配 (如 VARCHAR(255) 存手機號) 及時 ALTER TABLE ... MODIFY COLUMN 縮容,可顯著降低存儲與內存壓力。