1 数值类型作用
用来数据计算的,如加,减,乘,除,幂,乘方等的业务场景。
2 整型类型
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
TINYINT | 微整数,带符号别名为INT1,无符号别名为UINT1。 | 1字节 | * 带符号的范围是0 ~ +255。 * 无符号的范围是0 ~ +255。 |
SMALLINT | 小范围整数,带符号别名为INT2,无符号别名为UINT2。 | 2字节 | * 带符号的范围是-32,768 ~ +32,767。 * 无符号的范围是0 ~ +65,535。 |
INTEGER | 常用的整数,带符号别名为INT4,无符号别名为UINT4。 | 4字节 | * 带符号的范围是-2,147,483,648 ~ +2,147,483,647。 * 无符号的范围是0 ~ +4,294,967,295。 |
BIGINT | 大范围的整数,带符号别名为INT8,无符号别名为UINT8。 | 8字节 | * 带符号的范围是-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807。 * 无符号的范围是0 ~ +18,446,744,073,709,551,615。 |
举例:
创建具有TINYINT,INTEGER,BIGINT类型数据的表
csdn=> create table int_type_t22(
a tinyint,
b integer,
c bigint
);
CREATE TABLE
**注:**如果超出来integer类型的范围,会直接报ERROR: integer out of range
csdn=> INSERT INTO int_type_t22 VALUES(100,21000000000,3100000000000000000);
ERROR: integer out of range
CONTEXT: referenced column: b
3 精度类型
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
NUMERIC[(p[,s])], DECIMAL[(p[,s])] | * 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明:p为总位数,s为小数位数。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
NUMBER[(p[,s])] | NUMERIC类型的别名。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
举例:
csdn=> CREATE TABLE decimal_type_t1
csdn-> (
csdn(> DT_COL1 DECIMAL(10,4)
csdn(> );
CREATE TABLE
csdn=>
csdn=>
csdn=> insert into decimal_type_t1 values(1113.123456);
INSERT 0 1
csdn=> select * from decimal_type_t1;
dt_col1
-----------
1113.1235
(1 row)
csdn=> insert into decimal_type_t1 values(1113.123356);
INSERT 0 1
csdn=> select * from decimal_type_t1;
dt_col1
-----------
1113.1235
1113.1234
(2 rows)
csdn=> insert into decimal_type_t1 values(1113.123346);
INSERT 0 1
csdn=> select * from decimal_type_t1;
dt_col1
-----------
1113.1235
1113.1234
1113.1233
(3 rows)
csdn=>
**注:**默认会做四舍五入运算
4 序列整数
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
SMALLSERIAL | 二字节序列整型。 | 2字节。 | -32,768 ~ +32,767。 |
SERIAL | 四字节序列整型。 | 4字节。 | -2,147,483,648 ~ +2,147,483,647。 |
BIGSERIAL | 八字节序列整型。 | 8字节。 | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807。 |
LARGESERIAL | 默认插入十六字节序列整型,实际数值类型和NUMERIC相同。 | 变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 小数点前最大131,072位,小数点后最大16,383位。 |
举例:
csdn=> create table serial_type_tab(a smallserial,b serial,c bigserial,d largeserial);
NOTICE: CREATE TABLE will create implicit sequence "serial_type_tab_a_seq" for serial column "serial_type_tab.a"
NOTICE: CREATE TABLE will create implicit sequence "serial_type_tab_b_seq" for serial column "serial_type_tab.b"
NOTICE: CREATE TABLE will create implicit sequence "serial_type_tab_c_seq" for serial column "serial_type_tab.c"
NOTICE: CREATE TABLE will create implicit sequence "serial_type_tab_d_seq" for serial column "serial_type_tab.d"
CREATE TABLE
csdn=> insert into smallserial_type_tab values(default,default,default,default);
INSERT 0 1
csdn=> insert into smallserial_type_tab values(default,default,default,default);
INSERT 0 1
csdn=> select * from smallserial_type_tab;
a | b | c | d
---+---+---+---
1 | 1 | 1 | 1
2 | 2 | 2 | 2
3 | 3 | 3 | 3
(3 rows)
csdn=>
5 浮点类型
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
REAL, FLOAT4 | 单精度浮点数,不精准。 REAL数据类型在满足说明的场景下,映射为双精度浮点数FLOAT8,使用场景参考FLOAT8。 | 4字节。 | -3.402E+38~+3.402E+38,6位十进制数字精度。 |
REAL(p,s) | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 未指定精度和标度的情况下,默认精度p为10,标度s为0。 该类型映射为NUMERIC,使用场景参考NUMERIC。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
DOUBLE PRECISION, FLOAT8 | 双精度浮点数,不精准。 | 8字节。 | -1.79E+308~+1.79E+308,15位十进制数字精度。 |
DOUBLE | 双精度浮点数,不精准。 该类型映射为双精度浮点数FLOAT8,使用场景参考FLOAT8。 | 8字节。 | -1.79E+308~+1.79E+308,15位十进制数字精度。 |
DOUBLE(p,s) | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 未指定精度和标度的情况下,默认精度p为10,标度s为0。 该类型映射为NUMERIC,使用场景参考NUMERIC。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
FLOAT[(p)] | 浮点数,不精准。精度p取值范围为[1,53]。 根据精度p不同选择,p<=24时映射为REAL类型,p>24时映射为DOUBLE PRECISION类型,不指定精度时,映射为DOUBLE PRECISION类型。 在满足说明中的场景下,精度p<=24时映射为FLOAT4类型,p>24时映射为DOUBLE PRECISION类型,不指定精度时,映射为FLOAT4类型。 | 4字节或8字节。 | - |
FLOAT(p,s) | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 在未指定精度和标度的情况下,默认精度p为10,标度s为0。 该类型映射为NUMERIC,使用场景参考NUMERIC。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
BINARY_DOUBLE | 是DOUBLE PRECISION的别名,为兼容Oracle数据类型。 | 8字节。 | -1.79E+308~+1.79E+308,15位十进制数字精度。 |
DEC[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 在满足说明中的场景且未指定精度和标度的情况下,默认精度p为10,标度s为0。 该类型映射为NUMERIC,使用场景参考NUMERIC。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
INTEGER[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 在未指定精度和标度的情况下,默认精度p为10,标度s为0。 未指定精度和标度的情况下,该类型映射为INTEGER。指定精度和标度的情况下,该类型映射为NUMERIC。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 未指定精度和标度的情况下,范围是-2,147,483,648 ~ +2,147,483,647。 |
注:
-
二进制浮点数据类型REAL、FLOAT4、DOUBLE、DOUBLE PRECISION、FLOAT8、FLOAT[(p)]和BINARY_DOUBLE为不精确的数值类型,其内部存储为近似值,因此存储和检索时可能会显示轻微的差异。当用户在使用二进制浮点数据类型时需要注意以下几点:
-
精确存储和计算 :如果需要精确存储和计算(例如货币金额),请改用精确的数据类型(例如numeric)。
-
复杂计算:若使用不精确的数据类型执行复杂计算以获得重要数据,需要仔细评估其结果。
-
浮点数比较:比较两个浮点数是否相等的结果可能与预期存在差异。
-
下溢错误:如果一个浮点数过于接近零,反而无法准确表示,会导致下溢错误。
-
举证:
csdn=> CREATE TABLE float_type_t2
csdn-> (
csdn(> FT_COL1 INTEGER,
csdn(> FT_COL2 FLOAT4,
csdn(> FT_COL3 FLOAT8,
csdn(> FT_COL4 FLOAT(3),
csdn(> FT_COL5 BINARY_DOUBLE,
csdn(> FT_COL6 DECIMAL(10,4),
csdn(> FT_COL7 INTEGER(6,3)
csdn(> );
CREATE TABLE
csdn=>
csdn=> INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654);
INSERT 0 1
csdn=>
csdn=>
csdn=> select * from float_type_t2;
ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7
---------+---------+-------------+---------+---------+----------+---------
10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124
(1 row)
csdn=>
6 批注
数值类型是最常用的一种数据类型,在做表设计时要清楚业务场景适当选择。