【国产数据库】GBase学习⑦ - 数据类型

导语

数据:数据是事实或观察的结果,是对客观事务的逻辑归纳,用于表示客观事物的未加工的原始素材。

数据类型:在GBase 8c中,数据类型是数据的一个基本属性,用于区分不同类型的数据。不同的数据类型所占用的存储空间不同,能够进行的操作也不同。

数据库中的数据存储在数据表中,数据表中的每一列都定义了其数据类型。当用户存储数据时,需要遵循这些数据类型的属性定义否则可能会出现报错或精度丢失等问题。在GBase 8c中,主要的数据类型有:

  • 常用的数据类型:数值类型,字符类型,日期类型等
  • 非常用的数据类型:布尔类型、二进制类型、XML类型、几何类型等。
  • 自定义数据类型

数值类型-整数类型

整数类型描述存储空间范围
TINYIINT微整数,别名为INT11字节0~255
SMALLINT小范围整数,别名为INT22字节-32,768~+32,767
INTEGER常用的整数,INT44字节-2147483648~+2147483647
BINARY_INTEGERINTEGER的别名4字节-2147483648~+2147483647
BIGINT大范围的整数,别名为INT88字节-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807
int16十六字节的大范围整数,目前不支持用于建表等使用16字节-170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727

数值类型-任意精度类型

任意精度类型描述存储空间范围
NUMERIC[(p[,s])]精度p取值范围[1,1000],标度取值范围[0,p]。p为总位数,s为小数位数。用户声名精度。每四位(十进制位)占用两个字节,然后再整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
DECIMAL[(p[,s])]精度p取值范围[1,1000],标度取值范围[0,p]。p为总位数,s为小数位数。用户声名精度。每四位(十进制位)占用两个字节,然后再整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
NUMBER[(p[x,s])]NUMERIC类型的别名。精度p取值范围[1,1000],标度取值范围[0,p]。p为总位数,s为小数位数。用户声名精度。每四位(十进制位)占用两个字节,然后再整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

数值类型-序列整数类型

序列整数类型;描述;存储空间;范围

整数类型描述存储空间范围
SMALLSERIAL二字节序列整型2字节-32,768~+32,767
SERIAL四字节序列整型四字节-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

数值类型-浮点类型

整数类型描述存储空间范围
REAL,FLOAT4单精度浮点数4字节-3.402E+38~3.402E+38,6位十进制数字精度。
DOUBLE PRRECISION,BINARY_DOUBLE,FLOAT8双精度浮点数8字节-1.79E+308~1.79E+308,15位十进制数字精度。
FLOAT[§]精度p取值范围为[1,53],p为精度,表示总位数4字节或8字节根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。

字符类型

整数类型描述存储空间
CHAR(n)定长字符串,不足补空格,n是指字节长度,如不带精度n,默认精度为1最大为10MB
CHARACTER(n)-
NCHAR(n)-
VARCHAR(n)变长字符串。不同的兼容模式下,n表示的含义不同(如:PG兼容模式下,n是字符长度;A兼容模式下,n指代字节长度)最大为10MB
CHARACTER-
VARYING(n)-
VARCHAR2(n)变长字符串。是VARCHAR(n)类型的别名最大为10MB
NVARCHAR2(n)变长字符串。n指代字符长度最大为10MB
NVARCHAR(n)变长字符串。是NVARCHAR2(n)类型的别名最大为10MB
TEXT变长字符串最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大大小可能小于1GB-1
CLOB文本大对象,TEXT类型的别名-

日期/时间类型

整数类型描述存储空间
DATE日期和时间4字节,A兼容模式时8字节
TIME[( p )][WITHOUT TIME ZONE]只用于一日内的时间。p表示小数点后的精度,取值范围为0~68字节
TIME[( p )][WITH TIME ZONE]只用于一日内的时间,带时区。p表示小数点后的精度,取值范围为0~612字节
TIMESTAMP[( p )][WITHOUT TIME ZONE]日期和时间,p表示小数点后的精度,取值范围为0~68字节
TIMESTAMP[( p )][WITH TIME ZONE]日期和时间,带时区。别名为TIMESTAMPTZ。取值范围为0~68字节
SMALLDATETIME日期和时间,不带时区,精确到分钟,秒位大于等于30秒进一位8字节
INTERVAL DAY(l) TO SECOND( p )时间间隔,X天X小时X分X秒 l:天数的精度,取值范围为0~6 ,p:秒数的精度,取值范围为0~616字节
INTERVAL[fields][( p )]时间间隔。fields包括:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE,HOUR TO SECOND,MINUTE TO SECOND。p:秒数的精度,取值范围为0~6。fields为SECOND,DAY TO SECOND,HOUR TO SECOND 或MINUTE TO SECOND时,参数p才有效12字节

二进制类型

整数类型描述存储空间
BLOB二进制大对象最大为1GB-8203字节(即1073733621字节)
RAW变长的十六进制类型最大为1GB-8203字节(即1073733621字节)
BYTEA变长的二进制字符串最大为1GB-8203字节(即1073733621字节)

布尔类型

整数类型描述存储空间
BOOLEAN布尔类型1字节
  • “真”值的有效文本值是:TRUE、‘t’、‘true’、‘y’、‘yes’、‘1’、‘TRUE’、true、整数范围内12^63-1、整数范围内-1-2^63
  • “假”值的有效文本值是:FALSE、‘f’、‘false’、‘n’、‘no’、‘0’、0、‘FALSE’、false
  • 使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)

位串类型

位串就是一串1和0的字符串。他们可以用于存储位掩码。

整数类型描述
bit(n)bit类型的数据必须准确匹配长度n,如果存储短或者长的数据都会报错
bit varying(n)bit varying类型的数据是最长为n的变长类型,超过n的类型会被拒绝。
  • 如果用户明确地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而不会抛出任何错误。
  • 如果用户明确地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。

其他数据类型-文本搜索类型

整数类型描述
tsvector表示为文本搜索优化的文件格式,一个唯一标准词位的有序列表。
tsquery表示检索条件,存储用于检索的词汇

其他数据类型-UUID类型

整数类型描述
uuidUUID是一个小写十六进制数据的序列,用来存储通用唯一标识符(UUID)。

其他数据类型-JSON\JSONB类型

整数类型描述
JSON、JSONB用来存储JSON数据,可以是单独的标量,也可以是数组,或键值对象

其他数据类型-XML类型

整数类型描述
xml用来存储XML(可扩展标记语言)数据

自定义数据类型:用户还可以通过CREATE TYPE 语句创建自定义类型,支持5种

  • 复合类型:由一个属性名和数据类型的列表指定。符合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。
  • 基本类型:用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。
  • shell类型:是一种用于后面要定义的类型的占位符。在创建基本类型时,需要shell类型作为一种向前引用。
  • 枚举类型:由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度不能超过63个字节。
  • 集合类型:类似数组,但是没有长度限制,主要在存储过程中使用。

示例:

创建一种符合类型,建表并插入数据以及查询
CREATE TYPE test_type1 AS (f1 int,f2 text);
CREATE TABLE t1(a int ,b test_type1);
INSERT INTO t1(1,(1,'demo'));
SELECT (b).fi FROM t1;
创建一个枚举类型
CREATE TYPE test_type2 AS ENUM('create','modify','closed');
创建一个集合类型
CREATE TYPE test_type3  AS TABLE OF t1;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值