MySQL 客戶端內建幫助系統,輸入 ? int 或 HELP float; 即可查看數據類型詳情,含範圍、存儲大小、語法等。
CREATE TABLE [IF NOT EXISTS] 表名 (
列名 數據類型 [完整性約束],
...
);
INSERT [INTO] 表名 [(列名...)] VALUES (值...);
| 大類 | 類型 | 存儲/範圍 | 備註 |
|---|---|---|---|
| 數值型 | TINYINT | 1 字節,-128~127 / 0~255 | 極小整數 |
| SMALLINT | 2 字節,-32768~32767 | 小整數 | |
| MEDIUMINT | 3 字節 | 中等整數 | |
| INT | 4 字節,-2147483648~2147483647 | 標準整數 | |
| BIGINT | 8 字節 | 大整數 | |
| 浮點/定點 | FLOAT(M,D) | 4 字節,單精度,約 7 位有效數字 | M=總位數,D=小數位 |
| DOUBLE(M,D) | 8 字節,雙精度,約 15 位有效數字 | ||
| DECIMAL(M,D) | 字符串存儲,M+2 字節 | 精確計算,金融首選 | |
| 字符串 | CHAR(M) | 定長,0~255 字符,右側填充空格 | 檢索時去除尾部空格 |
| VARCHAR(M) | 變長,0~65535 字符,實際長度+1~2 字節 | 不填充空格,保留尾部空格 | |
| TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT | 大文本,長度+1~4 字節 | 不建議頻繁查詢的大字段 | |
| ENUM | 最多 65535 個枚舉值,存儲索引 | 單選,如性別 | |
| SET | 最多 64 個成員,存儲位圖 | 多選,如權限標籤 | |
| 日期時間 | DATE | 3 字節,1000-01-01 ~ 9999-12-31 | 僅日期 |
| TIME | 3 字節,-838:59:59 ~ 838:59:59 | 時間間隔或一天內時間 | |
| DATETIME | 8 字節,1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 日期時間組合,無時區 | |
| TIMESTAMP | 4 字節,1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 | 帶時區,自動更新 | |
| YEAR | 1 字節,1901~2155 | 年份 |
創建測試表 test1,包含 TINYINT 至 BIGINT 五列。插入最大值:
INSERT INTO test1 VALUES(127, 32767, 8388607, 2147483647, 231456789);
SMALLINT 超範圍 (65535) 直接報錯 Out of range value,修正後成功。MySQL 支持隱式類型轉換,字符串 '1' 可自動轉為數值 1;非數字字符串參與運算轉為 0 並產生警告。
建表 test2(FLOAT(6,2), DOUBLE(6,2), DECIMAL(6,2))。插入 23.34567 觀察四捨五入:三類型均四捨五入,但 DECIMAL 超範圍產生警告,FLOAT/DOUBLE 靜默截斷。驗證 12.5678 → 12.57,確認銀行級計算必須用 DECIMAL。
'13:14:24'、'101010' (10:10:10)、'3 10:10:10' (82:10:10)、數字 123546 (12:35:46)、NOW()/CURRENT_TIME。範圍 -838:59:59 ~ 838:59:59。'2014/12/13'、'2014@12@13'、數字 20151223、0 (0000-00-00)、NOW() (含時間部分會警告截取)。'2014-08-31 13:23:56'、'2014@09@01 14-25-36'。建表 teststring(CHAR(5), VARCHAR(5)),插入 'A' 觀察存儲。CHAR 右側填充空格,檢索自動去除;VARCHAR 保留原樣。中文插入需 SET NAMES GBK (或 utf8mb4) 確保客戶端編碼一致,否則亂碼。效率:CHAR > VARCHAR > TEXT,但 CHAR 浪費空間,長度超 255 或不定長必用 VARCHAR/TEXT。
ENUM('男','女','保密') 存儲索引 (1,2,3),插入數字或字符串均可。SET('A','B','C','D') 允許組合 'A,B,C',順序無關,插入非集合值報錯 Data truncated。適用於狀態標記、權限位圖場景。
utf8mb4,避免 Emoji 截斷。BIGINT 存儲毫秒級 Unix 時間,規避 2038 年問題並便於跨時區計算。