常见数据类型说明

PolarDB PostgreSQL版(兼容Oracle)支持丰富的数据类型,以满足不同的业务和数据建模需求。为帮助您在设计数据库时作出最佳选择,本文对功能相同或相似的类型名称(别名)进行了归纳,并详细列出了各类数据类型的核心特性与适用场景。

常见数据类型

下表为您详细列出了PolarDB PostgreSQL版(兼容Oracle)支持的数据类型。

  • 类型名称(Type Name):数据库中定义和使用的具体类型标识符。

  • 展示类型(Display Type):用于统一表示和显示的标准化类型名称。

  • 类型描述(Description):详细说明该数据类型的特性、用途和适用场景。

在数据库的底层实现中,不同类型名称可能共享相同的存储结构和处理逻辑。为避免混淆并提供更清晰的理解,PolarDB引入了展示类型(Display Type)这一概念,对具有相同底层实现的数据类型进行统一归类和展示。这一设计不仅有助于简化类型管理,还能让您更直观地了解各种数据类型之间的关系和差异,从而在实际开发过程中做出更为恰当的类型选择。

类型名称(Type Name)

展示类型(Display Type)

类型描述(Description)

booleanbool

boolean

逻辑布尔值(真/假)

serial2

smallint

自动增长的2字节整数

serialserial4

integer

自动增长的4字节整数

bigserial

bigint

自动增长的8字节整数

smallintint2

int2

有符号2字节整数

integerbinary_integerintint4

integer

有符号4字节整数

bigintint8

int8

有符号的8字节整数

binary_floatfloat4real

real

单精度浮点数(4字节)

binary_doublefloat8double precision

double precision

双精度浮点数(8字节)

decimal [ (p,s) ]number [ (p,s) ]numeric [ (p,s) ]

numeric [ (p,s) ]

可自定义精度的精确数值

rawblobbytea

bytea

二进制数据(字节数组)

bit [ (n) ]

bit [ (n) ]

定长位串

bit varying [ (n) ]varbit [ (n) ]

bit varying [ (n) ]

变长位串

clobstringlongnclobtext

text

变长字符串

character [ (n) ]nchar [ (n) ]char [ (n) ]

character [ (n) ]

定长字符串

character varying [ (n) ]varchar2 [ (n) ]nvarchar2 [ (n) ]varchar [ (n) ]

character varying [ (n) ]

变长字符串

date

date

日期类型(年、月、日、时、分、秒)

time [ (p) ] [ without time zone ]

time [ (p) ] [ without time zone ]

一天中的时间(无时区)

time [ (p) ] with time zone

time [ (p) ] with time zone

一天中的时间,包括时区

timestamp [ (p) ] [ without time zone ]

timestamp [ (p) ] [ without time zone ]

日期和时间(无时区)

timestamp [ (p) ] with time zonetimestamp [ (p) ] with local time zone

timestamp [ (p) ] with time zonetimestamp [ (p) ] with local time zone

日期和时间,包括时区

interval [ fields ] [ (p) ]

interval [ fields ] [ (p) ]

时间间隔

json

json

文本JSON数据

jsonb

jsonb

二进制JSON数据(已分解的文本JSON数据)

jsonpath

jsonpath

用于查询JSON数据的路径表达式

json_element_t

json_element_t

兼容Oracle语法的JSON基类

json_array_t

json_array_t

兼容Oracle语法的JSON数组

json_object_t

json_object_t

兼容Oracle语法的JSON对象

json_key_list

json_key_list

VARCHAR2类型的变长数组,用于存储JSON对象键名

json_nkey_list

json_nkey_list

NVARCHAR2类型的变长数组,用于存储JSON对象键名

box

box

平面上的矩形

cidr

cidr

IPv4IPv6网络地址

circle

circle

平面上的圆

rowid

rowid

行标识符类型

urowid

urowid

通用行标识符类型

xml

xml

XML数据格式

xmltype

xmltype

兼容Oracle语法格式的XML数据

xmlsequencetype

xmlsequencetype

xmltype的变长数组,作为xmlsequence函数的返回值类型

inet

inet

IPv4IPv6主机地址

line

line

平面上的无限长线

lseg

lseg

平面上的线段

macaddr

macaddr

MAC(Media Access Control)地址

macaddr8

macaddr8

EUI-64 格式的MAC(Media Access Control)地址

money

money

货币金额

path

path

平面上的几何路径

pg_lsn

pg_lsn

PostgreSQL日志序列号

pg_snapshot

pg_snapshot

事务ID快照

txid_snapshot

txid_snapshot

事务ID快照

说明

当前类型已废弃,请使用pg_snapshot

point

point

平面上的几何点

polygon

polygon

平面上的封闭几何路径

tsquery

tsquery

全文搜索查询类型

tsvector

tsvector

全文搜索文档类型

uuid

uuid

通用唯一标识符

选型参考

  • jsonjsonbjson类型按文本原样存储,插入速度快。而jsonb类型是优化的二进制格式存储,支持索引,查询性能远优于json。对于需要频繁查询和操作JSON内部元素的场景,强烈建议使用jsonb

  • 数值精度:使用numericdecimal类型时,建议根据业务需求明确指定精度(precision)和标度(scale),以确保数据存储的准确性和空间效率。例如:numeric(10, 2)

  • 字符串类型character(n)char(n)是定长字符串,长度不足时会用空格补全,而character varying(n)varchar(n)是变长字符串,仅存储实际内容。在大多数场景下,推荐使用varchartext

常见问题

varchar(n)text有什么区别?应该用哪个?

PolarDB PostgreSQL版(兼容Oracle)中,varchar(n)text在性能上没有区别。varchar(n)会在插入时检查长度是否超过n,而text没有预设的长度限制。如果没有明确的长度限制业务要求,可以直接使用text类型。

如何为整数选择合适的类型?

请根据您要存储的数据范围选择最小的可用类型,以节省存储空间。

  • smallint:适用于范围较小的整数(-3276832767)。

  • integer:最常用的整数类型,适用于大多数场景(-21474836482147483647)。

  • bigint:适用于需要存储极大整数的场景(例如计数器、ID等)。

如果需要一个能自动增长的整数ID,请使用serial(等同于integer)或bigserial(等同于bigint)。