PostgreSQL数据类型--数值类型:整数类型、浮点数类型、任意精度类型

 2015年03月21日    11163     声明


PostgreSQL支付多种数值类型,数值类型主要有用来存储数字。不同的数值类型有不同的取值范围,取值范围越大,所需的存储空间也越大。PostgreSQL提供的数值类型主要包括:整数类型、浮点数类型、任意精度类型和序号类型。


类型名称 存储空间 数据范围 说明
SMALLINT 2字节 -32 768~32 767 小范围整型
INT(INTEGER) 4字节 -2 147 483 648〜2 147 483 647 普通整型
BIGINT 8字节 -9 223 372 036 854 775 808 〜 9 223 372 036 854 775 807 大整型
REAL 4字节 6 位十进制数字精度 浮点数类型
DOUBLE PRECISION 8字节 15 位十进制数字精度 双精度浮点数类型
NUMERIC 变长 任意 任意精度类型
SERIAL 4字节 1 ~ +2 147 483 647 自增整数
BIGSERIAL 8字节 1 ~ +9 223 372 036 854 775 807 大范围的自增整数


1.整数类型

整数类型包括:SMALLINT、INT(INTEGER)、BIGINT三种,三者在取值空间和存储范围上有所不同,不同的存储空间也决定了不同的查询效率。应根据实际需要选择最适合的类型,以在查询效率和存储空间上有所平衡。


2.浮点数类型

实际工作中很多地方需要用到带小数的数值,PostgreSQL使用浮点数来表示小数。浮点数类型有两种:REAL和DOUBLE PRECISION。PostgreSQL也支持使用标准的SQL语法,即:float和float(p)来声明非精确的数值类型,p表示可接受的精度。REAL类型对应float(1)~float(24),DOUBLE PRECISION对应float(25)~float(53),未声明精度时将被当作DOUBLE PRECISION处理。


3.任意精度类型

NUMERIC表示任意精度类型,PostgreSQL中任意精度类型可存储最多1000位精度的数字并且准确地进行计算,非常适合用于货币金额和其它要求计算准确的数据,但是,NUMERIC类型的运算速度要比整数类型或者浮点数类型要慢很多。使用格式为:NUMERIC(M,N)。其中,M称为精度,表示总位数;N称为标度,表示小数位。M和N决定了NUMERIC的取值范围,当用户数据的精度超出指定精度时,会进行四舍五入处理。


4.序号类型

序号类型SERIAL和BIGSERIAL并不是真正的类型, 只是为在表中设置唯一标识做的概念上的便利。在目前的实现中,下面一句话:

CREATE TABLE tablename (
	colname SERIAL
);

等价于:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename(
	colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);

类型名 SERIAL 和 SERIAL4 是等效的: 两个都创建 INTEGRE 字段。类型名 BIGSERIAL 和 SERIAL8 也一样,只不过它创建一个 BIGINT 字段。 如果你预计在表的生存期中使用的标识数目超过 231 个,那么你应该使用 BIGSERIAL。