本文详细解析 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、小说全文 |