PostgreSQL中的数据类型主要包括整形、浮点型、序列类型以及任意精度的数值
整数类型
整数类型包括:
smallint
, 2个字节,对应Java中的short,声明可以使用int2
integer
,4个字节,对应Java中的int,声明可以使用int4
bigint
,8个字节,对应Java中的long,声明可以使用int8
浮点数类型
浮点数类型包括:
real
,4个字节,对应Java中的float,创建表时可以用real
,float4
来进行声明double precision
,8个字节,对应Java中的double,创建表格时可以用double precision
,float8
来声明
注意: PG支持SQL标准的
float(p)
声明方法。但是,声明float(1)
~float(24)
时,PG实际使用的是real
类型,float(25)
~float(53)
时,PG实际使用的是double precision
类型。
序列类型
序列数据类型用于实现类似MySQL中的auto_increment
,PG中的序列类型包括:
smallserial
, 2个字节serial
,4个字节bigserial
,8个字节
关于serial
数据类型,本质上是定义了一个序列(sequence),例如,
|
|
这个表test
在创建时候,会创建一个sequence
用于生成id
字段的值。
任意精度的数值类型
任意精度的数据类型包含两个数据类型:decimal
和numeric
。这两个数据类型实际上是一样的。假设有一个如下声明:
|
|
那么,他表示的含义为:这个数总共可以标识5位,小数点前有2位,小数点后有3位,即可以存储xx.xxx
形式的数值(其范围为$[-99.999, 99.999]$)。
如果不声明精度的话(即直接声明为numeric
),则可以存储小数点前最多131072位,小数点后最多16383位的数。
实际使用时的若干考虑
世纪存储的时候有几个考虑:
- 使用序列时直接使用
bigserial
类型。这是因为,当表数量小的时候,其带来的性能影响几乎可以忽略不计,但是,如果伴随业务的增长,数据一直增长,终究可能会使用bigserial
类型,这样,不如直接使用bigserial
。 - 对于其他数据类型,除了非常确定一个字段是确定的数据类型的情况下,不如直接使用
numeric
来声明。
对于数据类型生用可以参考[1][1].
参考
[1]: https://www.youtube.com/watch?v=wzKWMF-kWGc&list=WL&index=35&t=881s Postgresql中的高级数据类型