PostgreSQL 数据类型与 Java 类型的映射关系,通常由 JDBC 驱动(如 PostgreSQL 官方的 postgresql JDBC driver)定义,不同框架(如 JPA、MyBatis)可能会在此基础上做一些封装,但核心映射规则一致。以下是常见的映射关系:
1. 数值类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
smallint | 2 字节整数(-32768~32767) | short、Integer | JDBC 通常返回 Short,可自动装箱为 Integer |
integer | 4 字节整数(-2^31~2^31-1) | int、Integer | 最常用,直接映射为 Integer |
bigint | 8 字节整数(-2^63~2^63-1) | long、Long | 映射为 Long |
numeric(p,s)/decimal | 精确小数(自定义精度和小数位) | java.math.BigDecimal | 必须用 BigDecimal 保证精度,避免丢失 |
real | 4 字节单精度浮点数 | float、Float | 精度较低(约 6-7 位有效数字) |
double precision(float8) | 8 字节双精度浮点数 | double、Double | 精度较高(约 15-17 位有效数字) |
serial/bigserial | 自增整数(隐式主键) | int/Integer、long/Long | 本质是 integer/bigint + 自增序列 |
2. 字符串与字符类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
char(n) | 固定长度字符串(不足补空格) | String | 读取时会包含尾部空格,需注意处理 |
varchar(n) | 可变长度字符串(最大 n) | String | 最常用,直接映射为 String |
text | 无长度限制的长文本 | String | 适合存储大文本(如文章、日志) |
3. 日期与时间类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
date | 日期(年 - 月 - 日) | java.sql.Date | 仅包含日期,无时间部分 |
time | 时间(时:分: 秒) | java.sql.Time | 仅包含时间,无日期部分 |
timestamp | 日期 + 时间(无时区) | java.sql.Timestamp | 对应 java.time.LocalDateTime(Java 8+) |
timestamp with time zone(timestamptz) | 带时区的日期时间 | java.sql.Timestamp | 对应 java.time.OffsetDateTime(Java 8+),JDBC 会转换为本地时区 |
interval | 时间间隔(如 1 day 2 hours) | java.sql.Date 或自定义处理 | 较少直接映射,通常用字符串或自定义类处理 |
4. 布尔类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
boolean | 布尔值(true/false) | boolean、Boolean | 直接映射为 Boolean |
5. 二进制与大对象类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
bytea | 二进制数据(字节数组) | byte[] | 适合存储小二进制数据(如图片缩略图) |
blob | 二进制大对象(PostgreSQL 中通常用 bytea 替代) | java.sql.Blob | 较少使用,推荐用 bytea + byte[] |
clob | 字符大对象(PostgreSQL 中通常用 text 替代) | java.sql.Clob | 推荐用 text + String 更简洁 |
6. 特殊类型
| PostgreSQL 类型 | 说明 | Java 类型(JDBC 映射) | 备注 |
|---|
array | 数组(如 int[]、varchar[]) | java.sql.Array 或具体数组类型 | 需通过 Array.getArray() 转换为 Java 数组(如 int[]、String[]) |
json/jsonb | JSON 数据 | String 或自定义 JSON 对象 | 通常先读为 String,再用 Jackson 等工具转为 Java 对象 |
uuid | 通用唯一标识符 | java.util.UUID | JDBC 可直接映射 |