本文详细解析 MySQL 数据类型与 Java 类型的对应关系,涵盖数值、日期、字符串、二进制等所有类型
一、为什么需要了解类型映射?
在数据库应用开发中,数据类型映射是 ORM 框架、JDBC 操作和 API 设计的基础核心。正确的类型映射能:
- 避免数据精度丢失(如浮点数)
- 防止字符编码问题(中文乱码)
- 优化存储空间(选择合适的数据类型)
- 提升查询性能(减少隐式类型转换
二、数值类型映射
MySQL 类型 |
范围/特点 |
Java 类型 |
注意事项 |
TINYINT |
-128127 / 0255 |
Byte/Integer |
自动装箱类型更常用 |
SMALLINT |
-32768~32767 |
Short/Integer |
|
MEDIUMINT |
-8388608~8388607 |
Integer |
较少使用 |
INT/INTEGER |
-2³¹~2³¹-1 |
Integer |
最常用整型 |
BIGINT |
-2⁶³~2⁶³-1 |
Long |
主键、大数量场景 |
FLOAT(M,D) |
单精度浮点数 |
Float |
精度问题:0.1+0.2 != 0.3 |
DOUBLE(M,D) |
双精度浮点数 |
Double |
同上 |
DECIMAL(M,D) |
精确小数(M:总位数,D:小数位) |
BigDecimal |
金融计算必用,避免精度丢失 |
BIT(M) |
位字段(1~64位) |
byte[]/Boolean |
JDBC 驱动可能返回 Boolean(M=1) 或 byte[](M>1) |
三、日期时间类型映射
MySQL 类型 |
格式 |
Java 类型 |
推荐方案 |
DATE |
'YYYY-MM-DD' |
java.sql.Date |
使用 LocalDate (Java 8+) |
TIME |
'HH:MM:SS' |
java.sql.Time |
使用 LocalTime (Java 8+) |
DATETIME |
'YYYY-MM-DD HH:MM:SS' |
java.sql.Timestamp |
使用 LocalDateTime (Java 8+) |
TIMESTAMP |
时间戳(1970-2038) |
java.sql.Timestamp |
注意时区问题 |
YEAR |
'YYYY' |
java.sql.Date/Integer |
直接使用 Integer 更简单 |
四、字符串类型
4.1 基础字符串类型
MySQL 类型 |
最大长度 |
Java 类型 |
字符集建议 |
CHAR(M) |
255字符 |
String |
定长存储(空格填充) |
VARCHAR(M) |
65,535字节 |
String |
最常用,按需分配空间 |
TINYTEXT |
255字节 |
String |
短文本 |
4.2 TEXT 系列类型详解
MySQL 类型 |
最大长度 |
Java 类型 |
使用场景 |
TEXT |
65,535字节 |
String |
文章内容、产品描述 |
MEDIUMTEXT |
16MB |
String |
电子书章节、长文档 |
LONGTEXT |
4GB |
String |
大型XML/JSON、小说全文 |