核心映射表
| MySQL 類型 | Java 類型 | JDBC 類型碼 | 備註 |
| VARCHAR | java.lang.String | 12 (VARCHAR) | 長度可變 |
| CHAR | java.lang.String | 1 (CHAR) | 定長 |
| BLOB | byte[] | -4 (BLOB) | 二進制大對象 |
| TEXT | java.lang.String | -1 (LONGVARCHAR) | 大文本 |
| TINYINT | java.lang.Integer / Boolean | -6 (TINYINT) | 1字節,Boolean 映射需配置 tinyInt1isBit |
| SMALLINT | java.lang.Integer | 5 (SMALLINT) | 2字節 |
| MEDIUMINT | java.lang.Integer | 4 (INTEGER) | 3字節 |
| INT/INTEGER | java.lang.Integer | 4 (INTEGER) | 4字節 |
| BIGINT | java.lang.Long / BigInteger | -5 (BIGINT) | 8字節,無符號用 BigInteger |
| FLOAT | java.lang.Float | 7 (FLOAT) | 4字節單精度 |
| DOUBLE | java.lang.Double | 8 (DOUBLE) | 8字節雙精度 |
| DECIMAL/NUMERIC | java.math.BigDecimal | 3 (DECIMAL) | 精確數值,金融必用 |
| BIT(1) | java.lang.Boolean | -7 (BIT) | 單位元 |
| BIT(>1) | byte[] | -4 (VARBINARY) | 多位元 |
| DATE | java.sql.Date | 91 (DATE) | 日期 |
| TIME | java.sql.Time | 92 (TIME) | 時間 |
| DATETIME | java.sql.Timestamp | 93 (TIMESTAMP) | 日期時間 |
| TIMESTAMP | java.sql.Timestamp | 93 (TIMESTAMP) | 帶時區 |
| YEAR | java.sql.Date / Short | 91 (DATE) | 年份,配置 yearIsDateType |
| ENUM/SET | java.lang.String | 1 (CHAR) | 枚舉/集合 |
| BINARY/VARBINARY | byte[] | -2/-3 (BINARY/VARBINARY) | 二進制字節串 |
特殊類型處理建議
- BLOB:存儲圖片/文件二進制,Java 用
byte[],大文件建議存檔案系統只存路徑。
- BOOLEAN:MySQL 本質是
TINYINT(1),Java 建議用 Integer (0/1) 避免 tinyInt1isBit 配置坑,Web 交互更直觀。
- DECIMAL:金額、精確計算必須用
BigDecimal,對應 MySQL DECIMAL(precision, scale)。
- 時區:
TIMESTAMP 會按時區轉換,DATETIME 不轉換。全局建議統一 UTC 存儲。
JDBC 獲取類型碼
ResultSetMetaData meta = rs.getMetaData();
int type = meta.getColumnType(i); // 返回上表 JDBC 類型碼
String typeName = meta.getColumnTypeName(i); // 返回數據庫類型名