OceanBase 数据库操作的每个值都有一个数据类型。值的数据类型将一组固定的属性与值相关联,这些属性使 OceanBase 将一种数据类型的值与另一种数据类型的值区别对待。OceanBase 数据库提供了许多内建数据类型, 这些内建数据类型也称 OceanBase 基本数据类型。

数据类型

OceanBase 支持如下数据类型,与 Oracle 数据类型保持一致:

  • 字符数据类型
  • 数值数据类型
  • 日期时间类型
  • RAW 数据类型
  • 大对象数据类型

字符数据类型

字符数据类型在数据库字符集或国家字符集中存储字符(字母数字)数据,即单词和自由格式的文本。字符数据类型与其他数据类型相比具有限制性,因此属性较少。

字符数据存储在字符串中,其字节值与创建数据库时指定的字符集之一相对应。OceanBase 支持单字节和多字节字符集。

说明

字符数据类型的列可以存储所有字母数字值,但是 NUMBER 数据类型的列只能存储数字值。

数据类型长度使用说明长度说明
CHAR(size [BYTE | CHAR])定长索引效率高,程序里面使用 trim 去除多余的空白。参数 size 必须是一个介于 1~2000 之间的数值,存储大小为 size 个字节。
NCHAR[(size)]定长使用 UNICODE 字符集(所有的字符使用两个字节表示) 。参数 size 必须是一个介于 1~2000 之间的数值,存储大小为 size 字节的两倍。
NVARCHAR2(size)变长使用 UNICODE 字符集(所有的字符使用两个字节表示)。参数 size 的值必须介于 1~32767 之间,字节的存储大小是所输入字符个数的两倍。
VARCHAR2(size [BYTE | CHAR])变长使用 UNICODE 字符集(所有的字符使用两个字节表示)。参数 size 必须是一个介于 1~32767 之间的数值,存储大小为输入数据的字节的实际长度,而不是 size 个字节。
VARCHAR(size [BYTE | CHAR])变长OceanBase 中 VARCHARVARCHAR2 没有区别。参数 size 必须是一个介于 1~32767 之间的数值,存储大小为输入数据的字节的实际长度,而不是 size 个字节。

其中,CHARVARCHAR2 数据类型需要指定 length 语义,其默认值由系统变量 NLS_LENGTH_SEMANTICS 控制。

数值数据类型

OceanBase 为我们提供了四种存储数值的数据类型,它们分别是 NUMBERFLOATBINARY_FLOATBINARY_DOUBLE。您可以通过这四种数值类型存储定点数、浮点数和零。在数值计算时,数值类型具有不同的优先级,具体信息请查阅 数值类型的优先级

数据类长度(字节)说明
NUMBER4~40NUMBER(p,s) 存储变长、十进制精度的定点数;也可以存储浮点数,此时 NUMBER 没有 ps
FLOAT4~40FLOAT(p)NUMBER 数据类型的子类型。二进制精度范围为 1~126。FLOAT 不是浮点数。
BINARY_FLOAT4二进制精度浮点数,是一种 32 位单精度浮点数数据类型。
BINARY_DOUBLE8二进制精度浮点数,是一种 64 位双精度浮点数数据类型。

日期时间类型

与 Oracle 中的数据类型一致,OceanBase 也支持日期时间和间隔数据类型。日期时间数据类型被用来在数据库中保存日期和时间信息。与日期时间数据类型存储特定的一个时间点不同,间隔数据类型用来存储一段时间,可以有效表示了两个日期时间值之间的差异。

  • 日期时间数据类型:DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE
  • 间隔数据类型:INTERVAL YEAR TO MONTHINTERVAL DAY TO SECOND
类型格式取值范围说明
DATEDD-MON-RR0001-01-01 00:00:00
~
9999-12-31 23:59:59
存储日期和时间信息,精确到秒,不带时区。
TIMESTAMP [(scale)]DD-MON-RR HH.MI.SSXFF AM0001-01-01 00:00:00.000000000
~
9999-12-31 23:59:59.999999999
DATE 数据类型的扩展,精确到纳秒,不带时区。
TIMESTAMP [(scale)] WITH TIME ZONEDD-MON-RR HH.MI.SSXFF AM TZR0001-01-01 00:00:00.000000000
~
9999-12-31 23:59:59.999999999
DATE 数据类型的扩展,精确到纳秒,带时区信息。
TIMESTAMP [(scale)] WITH LOCAL TIME ZONEDD-MON-RR HH.MI.SSXFF AM0001-01-01 00:00:00.000000000
~
9999-12-31 23:59:59.999999999
带有本地时区的 TIMESTAMP 值,存储数据库时区。
INTERVAL YEAR TO MONTHINTERVAL  ’year-month’ YEAR(percision) TO MONTH由参数 percision 确定 YEAR 元素的精度。存储以年和月为单位的时间段。
INTERVAL DAY TO SECONDINTERVAL  ’dd hh:mm:ss’ DAY(precision) TO SECOND(fractional_seconds_precision)由参数 precisionfractional_seconds_precision 确定 DAY 元素的精度和 SECOND 元素小数部分的精度。存储以天、小时、分钟和秒为单位的时间段。

TIMESTAMP [(scale)]TIMESTAMP [(scale)] WITH TIME ZONETIMESTAMP [(scale)] WITH LOCAL TIME ZONE 的值域和精度取决于 scale。该属性表示小数部分的最大有效位数,取值范围 0~9,默认值为 6。

其中,时间类型的格式受系统变量 NLS_DATE_FORMATNLS_TIMESTAMP_FORMATNLS_TIMESTAMP_TZ_FORMAT 控制。

日期时间和间隔可以进行计算,具体信息请查阅 日期时间 DATE 和间隔 INTERVAL 的计算

RAW 数据类型

OceanBase 中用于保存二进制数据或字节字符串的数据类型是 RAW,是一种可变长度的数据类型,在不同平台上传输时,传送的都是二进制信息,即使字符集不同也不需要转换。

大对象数据类型

大对象数据类型(Large Object),简称 LOB。用来存储大型和非结构化数据,例如文本、图像、视频和空间数据等。

类型长度定义长度上限(字节)字符集
BLOB变长48MBINARY
CLOB变长48MUTF8MB4