He3DB数据库提供了丰富的数据类型,包括数值类型、字符类型、时间类型、布尔类型、货币类型、json类型等等,本文展示了几种常见的数据类型。
数值类型
Type | 存储大小/字节 | 描述 | 范围 |
smallint | 2 | 小范围整数 | -32768 至 +32767 |
integer | 4 | 整数的典型选择 | -2147483648 至 +2147483647 |
bigeint | 8 | 大范围整数 | -9223372036854775808 至 +9223372036854775807 |
decimal | 多变的 | 用户指定的精度,精确 | 小数点前最多 131072 位;小数点后最多 16383 位 |
numeric | 多变的 | 用户指定的精度,精确 | 小数点前最多 131072 位;小数点后最多 16383 位 |
real | 4 | 可变精度,不精确 | 6 位小数精度 |
double precision | 8 | 可变精度,不精确 | 15位十进制数字精度 |
smallserial | 2 | 自增小整数 | 1 至 32767 |
serial | 4 | 自增整数 | 1 至 2147483647 |
bigserial | 8 | 大自增整数 | 1 至 9223372036854775807 |
整数类型:除去经典的integer(int)类型,Postgreshai h还提供了smallint和bigint来适应不同情况的数据,一般只有在磁盘空间紧张的情况下使用smallint,在超过interger数值的时候才用bigint, 因为int要比bigint快得多。
smallint = int2
int = int4
bigint = int8
另外,Postgres不能像MySQL一样设置数值型的主键自增,而是提供了三种数据类型实现自增:smallserial、serial、bigserial。
任意精度类型:在 He3DB 中,decimal 和 numeric 是相同的,该类型numeric可以存储具有大量位数的数字。特别推荐用于存储货币金额和其他需要准确性的数量。numeric使用值进行计算会产生精确的结果,例如加法、减法、乘法,numeric类型小数位会补零,但是,numeric与整数类型、浮点类型相比,对值的计算非常慢。
浮点类型:数据类型real和double precision是不精确的、精度可变的数字类型,分别为单精度和双精度。扩展名为float4和float8。
字符类型
Type | 描述 |
character varying(n), varchar(n) | 有限制的可变长度,最大为1G |
character(n), char(n) | 固定长度,空白填充, 最大为1G |
text | 可变无限长度 |
在 He3DB 中,varchar(n) = character varying(n),char(n) = character(n)。另外,He3DB 还提供了一些字符转换函数。
函数 | 返回类型 | 描述 | 示例 |
to_char(timestamp,text) | text | 把时间戳转换成字符串 | to_char(current_timestamp,‘HH12:MI:SS’) |
to_char(interval,text) | text | 把间隔转换成字符串 | interval ‘15h 2m 12s’,HH24:MI:SS |
to_char(int,text) | text | 把整数转成字符串 | to_char(111,‘999’) |
to_date(text,text) | date | 把字符串转换成日期 | to_date(‘05 Dec 2000’,‘DD Mon YYYYY’) |
时间类型
Type | 存储长度 | 描述 |
timestamp | 8 bytes | 8 字节, 日期 +时间格式 |
timestamp with time zone | 8 bytes | 8 字节, 日期 + 时间 + 时区格式 |
date | 4 bytes | 4 字节, 日期格式(无时间) |
time | 8 bytes | 8 字节, 时间格式(无日期) |
time with time zone | 12 bytes | 12 字节, 时间 + 时区 |
interval | 12 bytes | 16 字节时间间隔 |
He3DB提供了许多返回当前日期和时间的函数。下面的函数都按照当前事务的开始时刻返回结果:
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIME(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)
now()
transaction_timestamp()
其中,CURRENT_TIME和 CURRENT_TIMESTAMP返回带有时区的值; 和 LOCALTIMESTAMP返回不带时区的值
CURRENT_TIME、CURRENT_TIMESTAMP、LOCALTIME、 LOCALTIMESTAMP 可以 有选择地给予一个精度参数,该精度会导致结果的秒数域四舍五人到指定的小数位。如果没 有精度参数,将给予所能得到的全部精度。
布尔类型
Type | 描述 |
boolean | true / false |