A-speed

每个人都是🏆
  新随笔  :: 管理

Oracle/MySQL/PostgreSQL字段类型对比详解

Posted on 2026-03-20 18:36  a-speed  阅读(2)  评论(0)    收藏  举报

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+