数值类型
该文档只介绍Vastbase兼容MySQL的数值类型,原Vastbase的数值类型未做删除和修改,详见数值类型。
整数类型
类型 | 描述 | 存储空间 | 取值范围 |
---|---|---|---|
INTEGER | 常用的整数,别名为INT4。 | 4字节 | -2,147,483,648 ~ +2,147,483,647 |
SMALLINT | 小范围整数,别名为INT2。 | 2字节 | -32,768 ~ +32,767 |
TINYINT | 微整数,别名为INT1。 | 1字节 | -128 ~ +127 |
BIGINT | 大范围的整数,别名为INT8。 | 8字节 | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
MEDIUMINT | INT4的别名, | 4字节 | -2,147,483,648 ~ +2,147,483,647 |
TINYINT UNSIGNED | 无符号微整数,别名为UINT1。 | 1字节 | 0 ~ 255 |
SMALLINT UNSIGNED | 无符号小范围整数,别名为UINT2。 | 2字节 | 0 ~ +65,535 |
INTEGER UNSIGNED | 无符号整数,别名为UINT4。 | 4字节 | 0 ~ +4,294,967,295 |
MEDIUMINT UNSIGNED | UINT4的别名, | 4字节 | 0 ~ +4,294,967,295 |
BIGINT UNSIGNED | 大范围的无符号整数,别名为UINT8。 | 8字节 | 0 ~ +18,446,744,073,709,551,615 |
为了确保与MySQL的语法兼容,Vastbase支持整数类型后跟随(n)的语法格式,即:INTEGER(n)、SMALLINT(n)、TINYINT(n)……,但功能上(n)并不生效。
示例
1、创建具有TINYINT, SMALLINT, MEDIUMINT, BIGINT类型数据的表。
CREATE TABLE int_type_t1
(
IT_COL1 TINYINT,
IT_COL2 SMALLINT,
IT_COL3 MEDIUMINT,
IT_COL4 BIGINT,
IT_COL5 INTEGER
);
2、查看表结构。
\d int_type_t1
返回结果为:
Table "public.int_type_t1"
Column | Type | Modifiers | Attalias
---------+----------+-----------+----------
it_col1 | tinyint | | IT_COL1
it_col2 | smallint | | IT_COL2
it_col3 | integer | | IT_COL3
it_col4 | bigint | | IT_COL4
it_col5 | integer | | IT_COL5
3、创建带zerofill属性字段的表。zerofill属性当前仅为语法兼容,实际功能与UNSIGNED属性一致,详见“COLUMN定义支持ZEROFILL/UNSIGNED属性”。
CREATE TABLE int_type_t2
(
IT_COL1 TINYINT(10) zerofill,
IT_COL2 SMALLINT(20) unsigned zerofill,
IT_COL3 MEDIUMINT(30) unsigned,
IT_COL4 BIGINT(40) zerofill,
IT_COL5 INTEGER(50) zerofill
);
4、查看表结构。
\d int_type_t2
返回结果为:
Table "public.int_type_t2"
Column | Type | Modifiers | Attalias
---------+-------+-----------+----------
it_col1 | uint1 | | IT_COL1
it_col2 | uint2 | | IT_COL2
it_col3 | uint4 | | IT_COL3
it_col4 | uint8 | | IT_COL4
it_col5 | uint4 | | IT_COL5
5、利用cast unsigned将表达式转换为uint8类型。
select cast(1 - 2 as unsigned);
返回结果为:
uint8
----------------------
18446744073709551615
(1 row)
6、利用cast signed将表达式转换为int8类型。
select cast(1 - 2 as signed);
返回结果为:
int8
------
-1
(1 row)
7、数据清理
DROP TABLE int_type_t1, int_type_t2;
任意精度型
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
NUMERIC[(p[,s])]DECIMAL[(p[,s])]FIXED[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。说明:p为总位数,s为小数位数。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,等价于(10,0),即小数点前最大10位,小数点后0位。 |
NUMBER[(p[,s])] | NUMERIC类型的别名。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
示例
1、创建具有FIXED(p,s), FIXED, decimal, number类型数据的表。
CREATE TABLE dec_type_t1
(
DEC_COL1 FIXED,
DEC_COL2 FIXED(20,5),
DEC_COL3 DECIMAL,
DEC_COL4 NUMBER
);
2、查看表结构。
\d dec_type_t1
返回结果为:
Table "public.dec_type_t1"
Column | Type | Modifiers | Attalias
----------+---------------+-----------+----------
dec_col1 | numeric(10,0) | | DEC_COL1
dec_col2 | numeric(20,5) | | DEC_COL2
dec_col3 | numeric(10,0) | | DEC_COL3
dec_col4 | numeric | | DEC_COL4
3、数据清理
DROP TABLE dec_type_t1;
浮点类型
名称 | 描述 | 存储空间 | 范围 |
---|---|---|---|
FLOAT[(p)]FLOAT4[(p)] | 浮点数,不精准。精度p取值范围为[1,53]。 | 4字节或8字节 | 当精度p在 [1,24]之间时,选项REAL作为内部表示,当精度p在 [25,53]之间时,选项DOUBLE PRECISION作为内部表示。如不指定精度,内部用REAL表示。 |
DOUBLE PRECISIONFLOAT8,DOUBLE | 双精度浮点数,不精准。 | 8字节 | -1.79E+308~1.79E+308,15位十进制数字精度。 |
FLOAT4(p,s) | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明:p为总位数,s为小数位位数,等价于dec(p,s)。 |
用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | - |
FLOAT(p,s)DOUBLE(p,s)REAL(p,s)DOUBLE PRECISION(p,s) | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明:p为总位数,s为小数位位数,其中float(p,s),real(p,s),double precision(p,s)大致等价于dec(p,s),但p和s都必须为整数,而double(p,s)完全等价于dec(p,s)。舍入方式为四舍五入。 |
用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | - |
示例
1、创建具有float4(p,s), double, float4(n), float(n)类型数据的表。
CREATE TABLE float_type_t1
(
F_COL1 FLOAT4(10,4),
F_COL2 DOUBLE,
F_COL3 float4(10),
F_COL4 float4(30),
F_COL5 float(10),
F_COL6 float(30)
);
2、查看表结构。
\d float_type_t1
返回结果为:
Table "public.float_type_t1"
Column | Type | Modifiers | Attalias
--------+------------------+-----------+----------
f_col1 | numeric(10,4) | | F_COL1
f_col2 | double precision | | F_COL2
f_col3 | real | | F_COL3
f_col4 | double precision | | F_COL4
f_col5 | real | | F_COL5
f_col6 | double precision | | F_COL6
3、创建具有float(p,s), double(p,s), real(p,s), double precision(p,s)类型数据的表。
CREATE TABLE test_float_double_real_double_precision
(
a FLOAT(20,2),
b DOUBLE(20,2),
c REAL(20,2),
d DOUBLE PRECISION(20,2)
);
4、查看表结构。
\d test_float_double_real_double_precision
返回结果为:
Table "public.test_float_double_real_double_precision"
Column | Type | Modifiers | Attalias
--------+---------------+-----------+----------
a | numeric(20,2) | | a
b | numeric(20,2) | | b
c | numeric(20,2) | | c
d | numeric(20,2) | | d
5、数据清理。
DROP TABLE float_type_t1;
DROP TABLE test_float_double_real_double_precision;