数据类型的摘要

GBase 8s 支持最常见内置数据类型集。此外,GBase 8s 上还支持扩展数据类型集。

下图显示 GBase 8s 支持的数据类型的逻辑类别。有阴影的类别表示仅在 GBase 8s 上受支持的其他数据类型。

图: 受支持数据类型的概述


如本章后面部分个别说明的那样,标注的矩形显示“内置”和“扩展”(仅用于 GBase 8s)数据类型类别的两个层次结构。结束图片描述

对此图作了简化;一些内置类型是作为不透明类型实现的,并且仅在 GBase 8s 上受支持。即,不透明内置不是分离的类别,虽然大部分内置数据类型都不是不透明数据类型。

内置数据类型(系统定义的)和扩展数据类型(您可以定义)都具有下列特征。您可以:
  • 使用它们来在数据库表中创建列。
  • 将它们声明为自变量和例程的返回类型。
  • 将它们用作从中创建 DISTINCT 数据类型的基本类型。
  • 将它们强制转型为其他数据类型。
  • 用 SPL 和 ESQL/C 声明和存取这些类型的主变量。

有关例外情况,请参阅每种数据类型的描述。要了解概述,请参阅内置数据类型扩展数据类型

可以使用 CREATE TABLE 语句将数据类型指定给列并使用 ALTER TABLE 语句更改数据类型。当更改现有列数据类型时,如果可能的话,会将所有数据转换为新数据类型。

有关 ALTER TABLE 和 CREATE TABLE 语句、创建特定数据类型及创建和删除强制转型的 SQL 语句以及其他数据类型主题的信息,请参阅 GBase 8s SQL 指南:语法

有关如何创建和使用 GBase 8s 支持的复杂数据类型的信息,请参阅《GBase 8s 数据库设计和实现指南》。有关如何创建用户定义的数据类型的信息,请参阅 GBase 8s 用户定义的例程与数据类型开发者指南

GBase 8s 支持的数据类型

下表列出 GBase 8s 支持的所有内置数据类型。

表 1. GBase 8s 支持的数据类型
数据类型 解释
BIGINT 数据类型 存储 8 个字节的整数值,从 -(263 -1) 到 263 -1
BIGSERIAL 数据类型 存储 8 个字节的顺序整数值,范围是 1 到 263 -1
BYTE 数据类型 存储任何种类的二进制数据,最长 231 个字节
CHAR(n) 数据类型 存储字符串;整理使用代码集顺序
CHARACTER(n) 数据类型 CHAR 的同义词
CHARACTER VARYING(m,r) 数据类型 存储可变长度字符串(符合 ANSI);以代码集顺序整理
DATE 数据类型 存储日历日期
DATETIME 数据类型 存储日历日期和一天中的时间
DEC 数据类型 DECIMAL 的同义词
DECIMAL 存储精度可定义的浮点数;如果数据库符合 ANSI,那么小数位为零
DECIMAL (p,s) 定点 存储已定义小数位和精度的定点数
DOUBLE PRECISION 数据类型 FLOAT 的同义词
FLOAT(n) 存储相应于 C 中的 double 数据类型的双精度浮点数
INT 数据类型 INTEGER 的同义词
INT8 存储 8 个字节的整数值,从 -(263 -1) 到 263 -1
INTEGER 数据类型 存储从 -2,147,483,647 到 +2,147,483,647 的整数
INTERVAL 数据类型 为单位存储时间范围(或工作的级别)。
INTERVAL 数据类型 以连续的单位小时分钟秒的若干分之几存储时间范围
MONEY(p,s) 数据类型 存储货币总额
NCHAR(n) 数据类型 与 CHAR 相同,但可以支持本地化的整理
NUMERIC(p,s) 数据类型 DECIMAL(p,s) 的同义词
NVARCHAR(m,r) 数据类型 与 VARCHAR 相同,但可以支持本地化整理
REAL 数据类型 SMALLFLOAT 的同义词
SERIAL(n) 数据类型 在 INT 的正数范围内存储连续整数 (> 0)
SERIAL8(n) 数据类型 在 INT8 的正数范围内存储连续整数 (> 0)
SMALLFLOAT 存储对应于 C 语言的 float 数据类型的单精度浮点数
SMALLINT 数据类型 存储从 -32,767 到 +32,767 的整数
TEXT 数据类型 存储任何种类的文本数据,最长 231 个字节
VARCHAR(m,r) 数据类型 存储可变长度字符串(最长 255 个字节);以代码集顺序整理
这些内置 SQL 数据类型在所有 GBase 8s SQL 事务中都有效,包括这些类型的数据操作语言 (DML) 操作:
  • 对本地数据库中对象的操作
  • 对本地服务器实例数据库中对象的跨数据库操作
  • 对两个或多个数据库服务器实例的数据库中对象的跨服务器操作

在跨服务器 MERGE 操作中,源表(而不是目标表)可以位于远程 GBase 8s 服务器的数据库中。

对于字符数据类型(CHAR、CHAR VARYING、LVARCHAR、NCHAR、NVARCHAR 和 VARCHAR),数据字符串可以包含数据库语言环境代码集中的字母、数字、标点符号、空格、区分标记、连字符和其他可打印符号。对于 UTF-8 和某些东亚语言环境的代码集,在数据字符串内支持多字节字符。

GBase 8s 支持的其他数据类型

下表列出 GBase 8s 支持的其他数据类型。
表 2. GBase 8s 支持的其他数据类型
数据类型 解释
BLOB 数据类型 以随机存取块的形式存储二进制数据
binary18 存储 18 字节二进制编码的字符串
binaryvar 存储最大长度为 255 个字节的二进制编码的字符串
BOOLEAN 数据类型 存储布尔值 true 和 false
CLOB 数据类型 以随机存取块的形式存储文本数据
DISTINCT 数据类型 以用户定义的类型存储数据,该类型与它所基于的源类型具有相同的格式,但该类型的强制转型和函数与源类型的不同
日历 存储 TimeSeries 数据类型的日历
日历模式 存储日历数据类型的日历模式的结构
IDSSECURITYLABEL 数据类型 存储 LBAC 安全标号对象。
LIST(e) 数据类型 存储元素的按顺序排序的集合,所有元素都具有同一数据类型 e;允许重复值
lld_locator 存储大对象标识
lld_lob_data 存储智能大对象的位置,并指定对象是否包含二进制或字符数据
LVARCHAR(m) 数据类型 存储可变长度字符串,可多至 32,739 个字节
MULTISET(e) 数据类型 存储值的非排序集合,所有元素都具有同一数据类型 e;允许重复值
节点 (node) 存储最多 256 个字符的可变长度的整数和小数点组合(用于表示分层关系)
OPAQUE 数据类型 存储用户定义的数据类型,其内部结构对于数据库服务器不可存取
ROW 数据类型,已命名 存储命名 ROW 类型
ROW 数据类型,未命名 存储未命名 ROW 类型
SET(e) 数据类型 存储元素的非排序集合,所有元素都具有同一数据类型 e;不允许重复值
ST_LineString 存储一维对象作为定义线性插值路径的点序列
ST_MultiLineString 存储 ST_LineString 数据类型的集合
ST_MultiPoint 存储 ST_Point 数据类型的集合
ST_MultiPolygon 存储 ST_Polygon 数据类型的集合
ST_Point 存储占用坐标空间中单个位置的零维几何
ST_Polygon 存储二维表面,并且作为定义外部边界环以及 0 或 0 个以上内部环的点序列存储
TimeSeries 存储行子类型的集合

其他主题中会单独描述 GBase 8s 的这些扩展数据类型。这些数据类型在定义数据类型的数据库上的本地操作中有效。

跨数据库分布式 SQL 事务中的扩展数据类型

对相同 GBase 8s 实例的其他数据库的分布式操作可访问 BOOLEAN、BLOB、CLOB 和 LVARCHAR 数据类型,这些数据类型是作为内置不透明类型来实现的。如果 UDT 和 DISTINCT 类型显式地强制转型为内置类型,并且如果所有的 UDT、强制转型和 DISTINCT 类型在所有参与的数据库中都进行了定义,这样的操作还能访问 DISTINCT 类型(它的基本类型是内置类型)和用户定义类型 (UDT)。

然而,您无法引用跨数据库事务(这些事务访问本地 GBase 8s 实例的多个数据库)中的以下扩展数据类型:
  • 没有强制转型为内置数据类型的 UDT
  • 没有强制转型为内置数据类型的 DISTINCT 类型
  • 集合数据类型
  • 命名或未命名 ROW 数据类型

跨服务器分布式 SQL 事务中的扩展数据类型

访问其他 GBase 8s 实例数据库的分布式 SQL 事务和函数调用无法返回复杂或智能大对象数据类型的值,也无法返回大部分单值或内置不透明数据类型。跨服务器 SQL 操作中只可访问以下数据类型:
  • 任何透明的内置数据类型
  • BOOLEAN
  • 透明的内置类型的 DISTINCT
  • BOOLEAN 的 DISTINCT
  • LVARCHAR 的 DISTINCT
  • 以上所列出的任何 DISTINCT 类型的 DISTINCT
  • IDSSECURITYLABEL
  • LVARCHAR

只有 DISTINCT 数据类型显式地强制转型为内置类型,且所有 DISTINCT 类型、其数据类型层次结构和其强制转型在参与分布式操作的每个数据库中采用相同的定义时,跨服务器分布式 SQL 事务才可支持 DISTINCT 数据类型。对于使用上面列表中的数据类型作为参数或返回数据类型的跨服务器 UDR 中的查询或其他 DML 操作,UDR 在每个参与数据库中的定义也必须相同。

拥有足够安全凭证的用户可以在对受保护数据的跨服务器和跨数据库操作中,访问存储安全标号对象的内置 DISTINCT 数据类型 IDSSECURITYLABEL。如对受保护数据的本地操作,在数据库服务器在对保护数据安全的安全标号和发出查询的用户的安全凭证进行比较后,访问安全策略保护的远程表的分布式查询只可以返回 IDSLBACRULES 允许的符合条件的行。