Oracle 和 PostgreSQL 常用数据类型的对比
在进行数据库迁移或在一个环境中使用多个数据库时,了解不同数据库系统支持的数据类型之间的对比是非常重要的。以下是 Oracle 和 PostgreSQL 常用数据类型的对比
数字数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| 小整数 | NUMBER(3,0) |
SMALLINT |
| 整数 | NUMBER |
INTEGER, INT |
| 大整数 | NUMBER |
BIGINT |
| 小数 | NUMBER(p,s) |
NUMERIC(p,s), DECIMAL(p,s) |
| 浮点数 | BINARY_FLOAT, BINARY_DOUBLE |
REAL, DOUBLE PRECISION |
| 自增列 | 序列(Sequences) + 触发器 | SERIAL, BIGSERIAL |
字符和文本数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| 定长字符 | CHAR(n) |
CHAR(n), CHARACTER(n) |
| 变长字符 | VARCHAR2(n) |
VARCHAR(n), CHARACTER VARYING(n) |
| 长文本 | CLOB |
TEXT |
日期和时间数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| 日期 | DATE |
DATE |
| 时间 | TIMESTAMP |
TIMESTAMP [ WITHOUT TIME ZONE ], TIMESTAMP [ WITH TIME ZONE ] |
| 时间戳 | TIMESTAMP WITH TIME ZONE |
TIMESTAMPTZ (alias for TIMESTAMP WITH TIME ZONE) |
| 时间间隔 | INTERVAL |
INTERVAL |
布尔数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| 布尔值 | NUMBER(1) 或 CHAR(1) (一般使用 0 或 1) |
BOOLEAN |
大数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| 可变长的二进制数据 | BLOB |
BYTEA |
UUID 数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| UUID | RAW(16) |
UUID |
JSON 数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| JSON | CLOB 或 BLOB(使用 JSON 类型的函数和方法进行处理) |
JSON, JSONB |
特殊数据类型
| 数据类型 | Oracle | PostgreSQL |
|---|---|---|
| IP 地址 | - | INET, CIDR |
| MAC 地址 | - | MACADDR |
| GIS 数据 | Oracle Spatial | PostGIS(扩展) |
| 全文检索 | Oracle Text | TSVECTOR, TSQUERY |