pg数据类型以及范围例如int2等
第 8 章 数据类型
postgresql 10 数据类型 (完整版) - nickchou - 博客园
int2 2是字节长度,即16位。 无符号是2^16 = 65535 有符号是 32767
pg10的数据类型
类型名称 | 别名 | 描述 |
---|---|---|
bigint | int8 | 有符号八字节整数 |
bigserial | serial8 | 自动递增八字节整数 |
bit (n) | 固定长度的bit字符串 | |
bit varying (n) | varbit (n) | 可变长度的bit字符串 |
boolean | bool | 逻辑布尔值(true / false) |
box | 平面上的矩形框 | |
bytea | 二进制数据(“字节数组”) | |
character (n) | char (n) | 固定长度的字符串 |
character varying (n) | varchar (n) | 可变长度字符串 |
cidr | IPv4或IPv6网络地址 | |
circle | 平面上的圆圈 | |
date | 日历日期(年,月,日) | |
double precision | float8 | 双精度浮点数(8字节) |
inet | IPv4或IPv6主机地址 | |
integer | int, int4 | 有符号的四字节整数 |
interval [ fields ] [ (p) ] | 时间跨度 | |
json | 文本JSON数据 | |
jsonb | 二进制JSON数据 | |
line | 平面上的线 | |
lseg | 平面上的线段 | |
macaddr | MAC(媒体访问控制)地址 | |
macaddr8 | MAC(媒体访问控制)地址(EUI-64格式) | |
money | 货币金额 | |
numeric (p, s) | decimal (p, s) | 可选精度的精确数字 |
path | 平面上的几何路径 | |
pg_lsn | PostgreSQL日志序列号 | |
point | 平面上的几何点 | |
polygon | 平面上的闭合的几何路径 | |
real | float4 | 单精度浮点数(4个字节) |
smallint | int2 | 签名的双字节整数 |
smallserial | serial2 | 自动递增两个字节的整数 |
serial | serial4 | 自动递增四字节整数 |
text | 可变长度字符串 | |
time (p) without time zone | 一天中的时间(没有时区) | |
time (p) with time zone | timetz | 一天中的时间,含时区 |
timestamp (p) without time zone | 日期和时间(没有时区) | |
timestamp (p) with time zone | timestamptz | 日期和时间,含时区 |
tsquery | 文本搜索查询 | |
tsvector | 文本搜索文档 | |
txid_snapshot | 用户级事务ID快照 | |
uuid | 普遍唯一的标识符 | |
xml | XML数据 |
数字
类型名称 | 存储大小 | 描述 | 范围 |
---|---|---|---|
smallint | 2 bytes | 整数(小范围) | -32768 至 +32767 |
integer | 4 bytes | 整数(常用) | -2147483648 至 +2147483647 |
bigint | 8 bytes | 整数(大范围) | -9223372036854775808 至 +9223372036854775807 |
variable | 可指定精确精度 | 小数点前最多131072位; 小数点后最多16383位 | |
numeric (p,s) | variable | 可指定精确精度 | 小数点前最多131072位; 小数点后最多16383位 |
real | 4 bytes | 精度可变 | 精度至少6位 |
double precision | 8 bytes | 精度可变 | 精度至少15位 |
smallserial | 2 bytes | 自动递增整数(小范围) | 1 至 32767 |
serial | 4 bytes | 自动递增整数 | 1 至 2147483647 |
bigserial | 8 bytes | 自动递增整数(大范围) | 1 至 9223372036854775807 |
货币
类型名称 | 存储大小 | 描述 | 范围 |
---|---|---|---|
money | 8 bytes | 货币金额,保留2位小数 | -92233720368547758.08 至 +92233720368547758.07 |
select '12.34567'::money;
--------------------- ¥12.35
/*查看货币类型*/
show lc_monetary;
--------------------- Chinese (Simplified)_People's Republic of China.936
/*重设货币类型*/
set lc_monetary='C';
/*再次查询货币,发现货币类型改了*/
select '12.34567'::money; --------------------- $12.35
select '12.34567'::money;
--------------------- ¥12.35
/*查看货币类型*/
show lc_monetary;
--------------------- Chinese (Simplified)_People's Republic of China.936
/*重设货币类型*/
set lc_monetary='C';
/*再次查询货币,发现货币类型改了*/
select '12.34567'::money; --------------------- $12.35
比较坑爹的是lc_monetary的设置是跟着数据库走的,也就是一个数据库只能有一种lc_monetary,所以不建议用money类型,改用numeric
字符串类型
类型名称 | 存储大小 | 描述 |
---|---|---|
character (n) | n | 如果存储的值比字段申明长度短,会用空白代替,不声明长度n默认是1 |
character varying (n) | n | 如果存储的值比字段申明长度短,不会用空白代替,不声明长度n代表任意长度 |
text | 任意长度 | 大文本使用 |
1 byte | 注意数据类型有引号,非一般用户用,主要用于内部系统目录中作为简单的枚举类型 | |
64 bytes | 固定长度,非一般用户用,主要用于内部系统目录中存储标识符 |
- character实际存储和显示的会用空白填充长度,但是比较字符串或者转换成其他字符串,填充的空白会被删除
- character varying和text不会默认用空白填充长度,但文本本身尾部有空白的话不会默认去掉,这种空白是有意义的
- 大多数情况下,字符串类型一般用character varying或text
二进制类型
类型名称 | 存储大小 | 描述 |
---|---|---|
bytea | 1或4个字节加上实际的二进制字符串 | 可变长度二进制字符串 |
等等