Oracle / MySQL / PostgreSQL 字段类型对比详解
概述
本文详细对比 Oracle、MySQL、PostgreSQL 三种主流数据库的字段类型,帮助开发者和DBA在数据库迁移、设计选型时快速查阅参考。
一、数值类型
1.1 整数类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 1字节整数 |
- |
TINYINT |
- |
| 2字节整数 |
- |
SMALLINT |
SMALLINT (2字节) |
| 3字节整数 |
- |
MEDIUMINT |
- |
| 4字节整数 |
- |
INT / INTEGER |
INTEGER (4字节) |
| 8字节整数 |
- |
BIGINT |
BIGINT (8字节) |
| 通用整数 |
NUMBER(p,0) |
- |
- |
| 自增整数 |
- |
INT AUTO_INCREMENT |
SMALLSERIAL / SERIAL / BIGSERIAL |
1.2 小数类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 定点数 |
NUMBER(p,s) |
DECIMAL(p,s) / NUMERIC(p,s) |
DECIMAL(p,s) / NUMERIC(p,s) |
| 单精度浮点 |
BINARY_FLOAT |
FLOAT(p≤24) |
REAL (4字节) |
| 双精度浮点 |
BINARY_DOUBLE |
FLOAT(p>24) / DOUBLE |
DOUBLE PRECISION (8字节) |
| 通用数值 |
NUMBER |
- |
- |
1.3 特殊数值类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 货币类型 |
- |
- |
MONEY |
| 序列类型 |
- |
- |
SMALLSERIAL / SERIAL / BIGSERIAL |
二、字符类型
2.1 定长字符
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 定长字符串 |
CHAR(n) |
CHAR(n) |
CHAR(n) / CHARACTER(n) |
| 最大长度 |
2000字节 |
255字符 |
不限(约1GB) |
| 填充方式 |
空格填充 |
空格填充 |
空格填充 |
2.2 变长字符
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 变长字符串 |
VARCHAR2(n) |
VARCHAR(n) |
VARCHAR(n) / CHARACTER VARYING(n) |
| 最大长度 |
4000字节 |
65535字节 |
不限(约1GB) |
| MySQL特有 |
- |
TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT |
- |
| PG特有 |
- |
- |
TEXT (无限长度) |
2.3 大文本类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 大文本 |
CLOB |
LONGTEXT (4GB) |
TEXT |
| 最大容量 |
4GB |
4GB |
约1GB |
2.4 国家字符集
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 定长Unicode |
NCHAR(n) |
NCHAR(n) |
CHAR(n) |
| 变长Unicode |
NVARCHAR2(n) |
NVARCHAR(n) |
VARCHAR(n) |
| 最大长度 |
2000字符 |
65535字节 |
不限 |
三、日期时间类型
3.1 日期类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 日期 |
DATE |
DATE |
DATE |
| 精度 |
年月日时分秒 |
年月日 |
年月日 |
| 存储空间 |
7字节 |
3字节 |
4字节 |
| 范围 |
公元前4712~公元9999 |
1000~9999 |
公元前4713~公元5874897 |
3.2 时间戳类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 时间戳 |
TIMESTAMP(p) |
DATETIME(p) |
TIMESTAMP(p) / TIMESTAMP WITH TIME ZONE |
| 精度 |
0~9位小数秒 |
0~6位微秒 |
0~6位微秒 |
| 时区支持 |
TIMESTAMP WITH TIME ZONE |
- |
TIMESTAMP WITH TIME ZONE |
| 时区范围 |
TIMESTAMP WITH LOCAL TIME ZONE |
- |
TIMESTAMP WITH LOCAL TIME ZONE |
3.3 时间类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 时间 |
- |
TIME(p) |
TIME(p) / TIME WITH TIME ZONE |
| 年份 |
- |
YEAR |
- |
| 间隔 |
INTERVAL YEAR TO MONTH |
- |
INTERVAL |
| 间隔 |
INTERVAL DAY TO SECOND |
- |
INTERVAL |
四、二进制类型
4.1 定长二进制
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 定长二进制 |
RAW(n) |
BINARY(n) |
BYTEA (变长) |
| 最大长度 |
2000字节 |
255字节 |
约1GB |
4.2 变长二进制
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 变长二进制 |
RAW(n) |
VARBINARY(n) |
BYTEA |
| 最大长度 |
2000字节 |
65535字节 |
约1GB |
4.3 大二进制对象
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| BLOB类型 |
BLOB |
BLOB / MEDIUMBLOB / LONGBLOB |
BYTEA |
| 最大容量 |
4GB |
4GB |
约1GB |
五、布尔类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 布尔类型 |
无(用NUMBER(1)) |
无(用TINYINT(1)) |
BOOLEAN / BOOL |
| 取值 |
0/1 |
0/1 |
TRUE/FALSE/NULL |
| 存储空间 |
1~22字节 |
1字节 |
1字节 |
六、JSON类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| JSON类型 |
JSON (21c+) |
JSON |
JSON / JSONB |
| 二进制JSON |
- |
- |
JSONB |
| 存储方式 |
文本 |
二进制 |
JSON文本 / JSONB二进制 |
| 索引支持 |
函数索引 |
函数索引 |
GIN索引 |
| 版本要求 |
21c+ |
5.7+ |
9.2+ |
七、枚举与集合类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 枚举类型 |
无(用CHECK约束) |
ENUM |
ENUM |
| 集合类型 |
无 |
SET |
- |
| 自定义类型 |
CREATE TYPE |
- |
CREATE TYPE |
八、数组类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 数组类型 |
VARRAY / 嵌套表 |
无 |
datatype[] |
| 多维数组 |
支持 |
不支持 |
支持 |
| 示例 |
CREATE TYPE arr AS VARRAY(10) OF NUMBER; |
- |
INTEGER[] / TEXT[][] |
九、几何类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| 点 |
SDO_GEOMETRY |
POINT |
POINT |
| 线 |
SDO_GEOMETRY |
LINESTRING |
LINE |
| 多边形 |
SDO_GEOMETRY |
POLYGON |
POLYGON |
| 空间扩展 |
Oracle Spatial |
MySQL Spatial |
PostGIS扩展 |
十、网络地址类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| IPv4地址 |
VARCHAR2(15) |
VARCHAR(15) |
INET |
| IPv6地址 |
VARCHAR2(45) |
VARCHAR(45) |
INET |
| MAC地址 |
VARCHAR2(17) |
VARCHAR(17) |
MACADDR / MACADDR8 |
| CIDR |
VARCHAR2 |
VARCHAR |
CIDR |
十一、UUID类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| UUID类型 |
RAW(16) / SYS_GUID() |
CHAR(36) / UUID() |
UUID |
| 生成函数 |
SYS_GUID() |
UUID() |
gen_random_uuid() |
| 存储空间 |
16字节 |
36字节 |
16字节 |
十二、XML类型
| 类型说明 |
Oracle |
MySQL |
PostgreSQL |
| XML类型 |
XMLTYPE |
无(用TEXT) |
XML |
| 存储方式 |
CLOB或二进制 |
文本 |
文本 |
| XPath支持 |
支持 |
有限 |
支持 |
| XQuery支持 |
支持 |
不支持 |
支持 |
十三、其他特殊类型
13.1 Oracle特有
| 类型 |
说明 |
| ROWID |
行物理地址标识符 |
| UROWID |
通用行标识符 |
| LONG |
已废弃的大文本类型(建议用CLOB) |
| LONG RAW |
已废弃的二进制类型(建议用BLOB) |
| BFILE |
外部文件引用 |
| ANYDATA |
可变类型数据 |
| ANYTYPE |
可变类型定义 |
| ANYDATASET |
可变类型数据集 |
13.2 MySQL特有
| 类型 |
说明 |
| BIT(n) |
位字段类型(1~64位) |
| TINYBLOB |
255字节BLOB |
| BLOB |
65KB BLOB |
| MEDIUMBLOB |
16MB BLOB |
| LONGBLOB |
4GB BLOB |
| TINYTEXT |
255字节TEXT |
| MEDIUMTEXT |
16MB TEXT |
13.3 PostgreSQL特有
| 类型 |
说明 |
| TSVECTOR |
全文搜索向量 |
| TSQUERY |
全文搜索查询 |
| HSTORE |
键值对存储 |
| LTREE |
标签树路径 |
| CIDR |
网络地址 |
| PG_LSN |
日志序列号 |
| TXID_SNAPSHOT |
事务ID快照 |
| REGCLASS |
关系名 |
| REGTYPE |
类型名 |
十四、类型映射速查表
14.1 常用类型映射
| 用途 |
Oracle |
MySQL |
PostgreSQL |
| 主键ID |
NUMBER(20) |
BIGINT |
BIGINT / SERIAL |
| 字符串 |
VARCHAR2(4000) |
VARCHAR(255) |
VARCHAR(255) |
| 长文本 |
CLOB |
TEXT |
TEXT |
| 金额 |
NUMBER(18,2) |
DECIMAL(18,2) |
DECIMAL(18,2) / MONEY |
| 日期时间 |
TIMESTAMP |
DATETIME |
TIMESTAMP |
| 布尔值 |
NUMBER(1) |
TINYINT(1) |
BOOLEAN |
| 二进制 |
BLOB |
BLOB |
BYTEA |
| JSON |
JSON (21c+) |
JSON |
JSONB |
| UUID |
RAW(16) |
CHAR(36) |
UUID |
14.2 迁移注意事项
| 迁移方向 |
注意事项 |
| Oracle → MySQL |
VARCHAR2 → VARCHAR, NUMBER → DECIMAL/INT, DATE需调整格式 |
| Oracle → PostgreSQL |
VARCHAR2 → VARCHAR, NUMBER → NUMERIC, CLOB → TEXT |
| MySQL → PostgreSQL |
TINYINT → SMALLINT, DATETIME → TIMESTAMP, AUTO_INCREMENT → SERIAL |
| PostgreSQL → MySQL |
BOOLEAN → TINYINT, TEXT → LONGTEXT, SERIAL → AUTO_INCREMENT |
| MySQL → Oracle |
INT → NUMBER(10), VARCHAR → VARCHAR2, DATETIME → TIMESTAMP |
十五、性能建议
15.1 数值类型选择
| 场景 |
推荐类型 |
原因 |
| 主键 |
BIGINT/SERIAL |
范围大,自增方便 |
| 金额 |
DECIMAL(18,2) |
精确计算,避免浮点误差 |
| 百分比 |
DECIMAL(5,2) |
0.00~100.00 |
| 数量统计 |
INTEGER |
4字节,范围足够 |
| 科学计算 |
DOUBLE PRECISION |
高精度浮点 |
15.2 字符类型选择
| 场景 |
推荐类型 |
原因 |
| 短字符串 |
VARCHAR(255) |
灵活,性能好 |
| 长文本 |
TEXT |
无长度限制 |
| 固定长度 |
CHAR |
如MD5、UUID |
| 中文存储 |
NVARCHAR2 / NVARCHAR |
Unicode支持 |
15.3 日期类型选择
| 场景 |
推荐类型 |
原因 |
| 生日 |
DATE |
只需年月日 |
| 日志时间 |
TIMESTAMP |
精确到毫秒 |
| 跨时区 |
TIMESTAMP WITH TIME ZONE |
时区转换 |
| 时间间隔 |
INTERVAL |
时间计算 |
总结
三种数据库在字段类型设计上各有特色:
| 数据库 |
特点 |
| Oracle |
类型丰富,NUMBER通用性强,企业级特性完善 |
| MySQL |
类型简洁实用,存储效率高,Web应用首选 |
| PostgreSQL |
类型最丰富,扩展性强,支持自定义类型 |
在进行数据库设计或迁移时,应根据业务需求和数据库特性选择合适的字段类型,确保数据完整性和查询性能。
整理日期:2026-03-20
适用版本:Oracle 21c+ / MySQL 8.0+ / PostgreSQL 16+