型別對照總表
| MySQL 型別 | 顯示長度 | Java 型別 | JDBC 類型碼 | 備註 |
| VARCHAR | L+N | java.lang.String | 12 (VARCHAR) | |
| CHAR | N | java.lang.String | 1 (CHAR) | |
| BLOB | L+N | byte[] | -4 (BLOB) | 圖片/二進位資料 |
| TEXT | 65535 | java.lang.String | -1 (LONGVARCHAR) | |
| TINYINT UNSIGNED | 3 | java.lang.Integer | -6 (TINYINT) | |
| SMALLINT UNSIGNED | 5 | java.lang.Integer | 5 (SMALLINT) | |
| MEDIUMINT UNSIGNED | 8 | java.lang.Integer | 4 (INTEGER) | |
| INT UNSIGNED | 10 | java.lang.Long | 4 (INTEGER) | |
| BIGINT UNSIGNED | 20 | java.math.BigInteger | -5 (BIGINT) | |
| FLOAT | 4+8 | java.lang.Float | 7 (FLOAT) | |
| DOUBLE | 22 | java.lang.Double | 8 (DOUBLE) | |
| DECIMAL | 11 | java.math.BigDecimal | 3 (DECIMAL) | 精確計算首選 |
| BIT | 1 | java.lang.Boolean | -7 (BIT) | |
| DATE | 10 | java.sql.Date | 91 (DATE) | |
| TIME | 8 | java.sql.Time | 92 (TIME) | |
| DATETIME | 19 | java.sql.Timestamp | 93 (TIMESTAMP) | |
| TIMESTAMP | 19 | java.sql.Timestamp | 93 (TIMESTAMP) | 時區敏感 |
| YEAR | 4 | java.sql.Date | 91 (DATE) | |
特殊型別處理建議
- BLOB:對應 `byte[]`,讀寫需用 `getBytes()`/`setBytes()` 或流式 API (`getBinaryStream`)。
- BOOLEAN:MySQL 內部為 `TINYINT(1)`,Java 建議用 `Integer` (0/1) 避免位元操作困擾,Web 表單綁定更直觀。
- UNSIGNED:Java 無無號型別,超出有號範圍時升級對應型別(如 `INT UNSIGNED` → `Long`)。
JDBC 取值最佳實務
// 字串
String name = rs.getString("name");
// 數值(防止截斷)
long id = rs.getLong("id");
BigDecimal amount = rs.getBigDecimal("amount");
// 日期時間
java.sql.Date sqlDate = rs.getDate("created_at");
Timestamp ts = rs.getTimestamp("updated_at");