0
点赞
收藏
分享

微信扫一扫

宝宝辅食标准与辅食做法,宝宝辅食的若干注意事项

小铺有酒一两不够 2024-05-02 阅读 4

PostgreSQL数据库相比其他数据库,支持更多的数据类型,包括常用的数值类型、字符串类型、日期/时间类型外,还有几何类型、网络地址类型、xml类型和json类型,且还可以使用CREATE TYPE自行添加数据类型,本文主要介绍PostgreSQL数据库主要的数据类型

1. 数值类型

常用数值类型如下表所示:

名称别名存储大小范围描述与其他数据库对比
smallintint22字节-225~215-1有符号的2字节整数MySQL中smallint,Oracle中number(5)
integerint,int44字节-231~231-1有符号的4字节整数MySQL中int,Oracle中number(38,0)
bigintint88字节-263~263-1有符号的8字节整数MySQL中bigint,Oracle中number(38)
realfloat44字节单精度浮点数MySQL中float,Oracle中binary_float
double precisionfloat88字节双精度浮点数MySQL中double,Oracle中binary_double或number
numeric [(p, s)]decimal [(p, s)]可选择精度的精确数字MySQL中decimal[(p, s)],Oracle中NUMBER[(p, s)]
money8字节-92233720368547758.08~+92233720368547758.07货币金额

2. 自增类型

常用自增类型如下表所示:

名称别名存储大小范围描述与其他数据库对比
smallserialserial22字节2字节自增整数MySQL中自增字段,Oracle中序列
serialserial44字节4字节自增整数MySQL中自增字段,Oracle中序列
bigserialserial88字节8字节自增整数MySQL中自增字段,Oracle中序列

3. 布尔类型

名称别名存储大小范围描述与其他数据库对比
booleanbool1字节true/falseMySQL中boolean,Oracle中number(1)

4. 二进制类型

名称别名存储大小范围描述与其他数据库对比
bytea二进制数据MySQL中blob,Oracle中blob

5. 位串类型

名称别名存储大小范围描述与其他数据库对比
bit [ (n) ]固定长度位串MySQL中bit [ (n) ]
bit varying [ (n) ]varbit[ (n) ]可变长度位串

6. 字符串类型

名称别名存储大小范围描述与其他数据库对比
character (n)char (n),bpchar(n)n个字节固定长度字符串,不足会被空格填充MySQL中char(n)
character varying (n)varchar (n)最多n个字节可变长度字符串MySQL中varchar(n),Oracle中varchar(n)
bpcharn个字符可变不限制长度字符串,不足字符被空格填充
text可变长度字符串MySQL中text,Oracle中clob

7.日期时间类型

名称别名存储大小范围描述与其他数据库对比
timestamp [ (p) ] [without time zone]8字节4713BC~294276AD无时区的日期和时间
timestamp [ (p) ] [with time zone]8字节4713BC~294276AD有时区的日期和时间
date4字节4713BC~5874897AD日期
time [ (p) ] [without time zone]8字节00:00:00~24:00:00时间
time [ (p) ] [with time zone]12字节00:00:00+1559~24:00:00-1559有时区的时间
interval [fields] [(p)]16字节-178000000years~178000000years时间间隔

8. 枚举类型

枚举类型是包含一系列有序的静态值集合的一个数据类型,使用前需要先声明
枚举类型使用CREATE TYPE来创建,如下所示:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

枚举创建后,就可以将其作为PostgresSQL预定义的类型使用

CREATE TABLE person (
	name text,
	current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');

9. 几何类型

PostgreSQL提供了点、线、矩形、多边形等几何类型,这也是区别于其他数据库的地方,如下表所示:

名称别名存储大小描述表现形式
point16字节平面中的点(x,y)
line32字节无限长的直线{A,B,C}
lseg32字节有限线段((x1,y1),(x2,y2))
box32字节矩形框((x1,y1),(x2,y2))
path16+16n字节封闭路径(类似多边形)((x1,y1),…)
path16+16n字节开放路径[(x1,y1),…]
polygon40+16n字节多边形(类似封闭路径)((x1,y1),…)
circle24字节<(x,y),r>

10. 网络地址类型

PostgreSQL为IPv4、IPv6以及以太网MAC地址都提供了特有的类型,如下表所示:

名称存储大小描述
cidr7或19字节IPv4和IPv6网络地址
inet7或19字节IPv4和IPv6网络地址和主机地址
macaddr6字节以太网MAC地址
macaddr88字节以太网MAC地址(EUI-64)

11. XML类型

xml类型可用于存储XML数据,插入数据时会对输入的数据进行检查,使不符合XML标准的数据不能存放到数据库中,同时还提供了函数对其类型进行安全性检查,可以使用函数xmlparse将字符串转换为xml数据,如下所示:

XMLPARSE ( {DOCUMENT | CONTENT} value)

示例如下:

XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>')
XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>')

也可以使用以下两种方式

xml '<foo>bar</foo>'
'<foo>bar</foo>'::xml

12. JSON类型

JSON数据类型可以用来存储JSON数据,插入数据时会自动检测字符串是否为合法的JSON数据,同时也提供了丰富的函数

名称存储大小描述
json文本json数据
jsonb重新解析的二进制json数据

12.1. JSON和JSONB区别

  1. JSON类型是把输入的数据原封不动的存放到数据库中(存储前会做JSON语法校验),使用时需要重新解析数据。而JSONB类型是在存储时就把JSON解析为二进制格式,使用时无须再次解析,使用JSONB时性能会更高
  2. JSON串中key之间多余空格、key的顺序和重复key会保留,JSONB不会保留多余空格和重复key
  3. JSONB支持在其上建立索引,而JSON不支持

12.2. JSON类型与PostgreSQL数据库类型映射

当把一个JSON类型的字符串转换为JSONB类型时,JSON字符串内的数据类型实际上被转换成了PostgreSQL数据库中的类型,映射如下表所示:

JSON类型PostgreSQL类型注意事项
stringtext注意字符集的一些限制
numbernumericJSON中没有PostgreSQL中的"NaN"和"infinity"值
booleanbooleanJSON仅能接受小写的"true"和"false"
null(none)SQL中的NULL代表不同意思
举报

相关推荐

我在树食中学到的

0 条评论