---
title: "常用数据类型 | OceanBase 文档中心"
description: 常用数据类型 在 OceanBase 数据库的 Oracle 模式下常用的数据类型包括：字符、数值、日期时间和间隔、RAW、大对象等数据类型。本文为您介绍各数据类型及描述。 字符数据类型 字符类型包括：CHAR、NCHAR、NVARCHAR2、VARCHAR2、VARCHAR。 数据类型 长度类型 使用说明 长度说明…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 常用数据类型

更新时间：2023-07-18 17:26:00

在 OceanBase 数据库的 Oracle 模式下常用的数据类型包括：字符、数值、日期时间和间隔、RAW、大对象等数据类型。本文为您介绍各数据类型及描述。

## 字符数据类型

字符类型包括：CHAR、NCHAR、NVARCHAR2、VARCHAR2、VARCHAR。

| **数据类型** | **长度类型** | **使用说明** | **长度说明** |
| --- | --- | --- | --- |
| CHAR(size [BYTE \| CHAR]) | 定长 | 索引效率高，程序里面使用 `trim` 去除多余的空白。 | 参数 `size` 的取值范围为 [1,2000]，默认值和最小值为 1。 存储大小为 `size` 个字符。 |
| NCHAR[(size)] | 定长 | 使用 UNICODE 字符集（所有的字符使用两个字节表示）。 | 参数 `size` 的取值范围为 [1,2000]，默认值和最小值为 1。 存储大小为 `size` 个字符。 |
| NVARCHAR2(size) | 变长 | 使用 UNICODE 字符集（所有的字符使用两个字节表示）。 | 参数 `size` 的取值范围为 [1,32767]。 存储大小为 `size` 个字符。 |
| VARCHAR2(size [BYTE \| CHAR]) | 变长 | 使用 UNICODE 字符集（所有的字符使用两个字节表示）。 | 参数 `size` 的取值范围为 [1,32767]。 存储大小为输入数据的字节或字符的实际长度，最大长度不超过 `size` 个字节或字符。 |
| VARCHAR(size [BYTE \| CHAR]) | 变长 | OceanBase 数据库中 `VARCHAR` 和 `VARCHAR2` 没有区别。 | 参数 `size` 的取值范围为 [1,32767]。 存储大小为输入数据的字节的实际长度，最大长度不超过 `size` 个字节。 |

## 大对象类型

大对象类型包括：BLOB 和 CLOB。

| **数据类型** | 长度类型 | **长度（字节）** | **使用说明** |
| --- | --- | --- | --- |
| BLOB | 变长 | 48 MB | 用于存储数据库中的大型二进制对象，可以将 BLOB 对象视为没有字符集语义的位流。BLOB 存储的二进制数据，其字节的长度上限为 48 MB，字符集是 BINARY。 |
| CLOB | 变长 | 48 MB | CLOB 用于存储单字节和多字节字符数据。CLOB 支持固定宽度和可变宽度字符集，且都使用数据库字符集。CLOB 可存储字节的长度上限（字节）是 48 MB，字符集与租户字符集一致。 |

## 数值数据类型

数值类型包括：NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE。

| **数据类型** | 长度类型 | **长度（字节）** | **使用说明** |
| --- | --- | --- | --- |
| NUMBER(p,s) | 变长 | [4,40] | 存储变长、十进制精度的定点数。也可以存储浮点数，此时 `NUMBER` 没有 `p` 和 `s` 参数。 |
| FLOAT(p) | 变长 | [4,40] | `NUMBER` 数据类型的子类型。二进制精度范围为 [1,126]。`FLOAT` 不是浮点数。 |
| BINARY_FLOAT | 定长 | 4 | 二进制精度浮点数，是一种 32 位单精度浮点数数据类型。 |
| BINARY_DOUBLE | 定长 | 8 | 二进制精度浮点数，是一种 64 位双精度浮点数数据类型。 |

## 日期时间和间隔数据类型

### 日期时间数据类型

日期时间数据类型用于保存日期和时间，OceanBase 数据库当前版本所支持的数值数据类型的信息如下表所示。

| 数据类型 | 说明 |
| --- | --- |
| DATE | 存储日期和时间信息，精确到秒，不带时区。格式：`DD-MON-RR`。 |
| TIMESTAMP | `DATE` 数据类型的扩展，精确到纳秒，不带时区。格式：`DD-MON-RR HH.MI.SSXFF AM`。 |
| TIMESTAMP WITH TIME ZONE | `DATE` 数据类型的扩展，精确到纳秒，带时区信息。格式：`DD-MON-RR HH.MI.SSXFF AM TZR`。 |
| TIMESTAMP WITH LOCAL TIME ZONE | 带有本地时区的 `TIMESTAMP`，存储数据库时区。格式：`DD-MON-RR HH.MI.SSXFF AM`。 |

### 间隔数据类型

与日期时间数据类型存储特定的一个时间点不同，间隔数据类型用来存储一段时间。间隔数据类型有效的存储了两个日期时间值之间的差异，此类别中有以下数据类型：

| **数据类型** | **说明** |
| --- | --- |
| INTERVAL YEAR TO MONTH | 存储以年和月为单位的时间段。 |
| INTERVAL DAY TO SECOND | 存储以天、小时、分钟和秒为单位的时间段。 |

### 相关字段和值

日期时间和间隔都由字段组成，这些字段的值决定了数据类型的值。

| 字段 | 日期时间的有效值 | 间隔的有效值 |
| --- | --- | --- |
| `YEAR` | -4712 ~ 9999 (不包括第 0 年) | 任何正整数或负整数。 |
| `MONTH` | 01 ~ 12 | 0 ~ 11 |
| `DAY` | 01 ~ 31 (受 `MONTH` 和 `YEAR` 的值限制，根据当前 NLS 日历参数的规则) | 任何正整数或负整数。 |
| `HOUR` | 00 ~ 23 | 0 ~ 23 |
| `MINUTE` | 00 ~ 59 | 0 ~ 59 |
| `SECOND` | 00 ~ 59.9(n) 其中 `9(n)` 是时间小数秒的精度。`9(n)` 部分不适用于 `DATE`。 | 0 ~ 59.9(n) 其中 `9(n)` 是间隔小数秒的精度。 |
| `TIMEZONE_HOUR` | -12 ~ 14（此范围适应夏令时更改） 不适用于 `DATE` 或 `TIMESTAMP`。 | 不适用 |
| `TIMEZONE_MINUTE` | 00 ~ 59 不适用于 `DATE` 或 `TIMESTAMP`。 | 不适用 |
| `TIMEZONE_REGION` | 查询 `V$TIMEZONE_NAMES` 数据字典视图的 `TZNAME` 列。 不适用于 `DATE` 或 `TIMESTAMP`。 | 不适用 |
| `TIMEZONE_ABBR` | 查询 `V$TIMEZONE_NAMES` 数据字典视图的 `TZABBREV` 列。 不适用于 `DATE` 或 `TIMESTAMP`。 | 不适用 |

## RAW 数据类型

RAW 是一种可变长度的数据类型，可以在具有不同字符集的数据库之间，或者具有不同字符集的服务器和客户端之间传输二进制数据流，而不需要字符集转换。

| **类型** | 使用范围 | 描述 |
| --- | --- | --- |
| RAW | 如果作为数据库中表的列，该参数最大支持存储 2000 字节的数据；如果作为 PL 变量，该参数最大支持存储 32767 字节的数据。 | 可以用于存储二进制数据或者字节串，例如图像、音频等。 |

## Rowid 数据类型

Rowid 数据类型包括：Rowid、URowid。

| 类型 | 描述 |
| --- | --- |
| Rowid | 可以通过查询伪列 `ROWID` 来检查 `ROWID` 行地址。该伪列的值为表示每行地址的字符串，这些字符串的数据类型为 `ROWID`。您还可以创建包含具有 `ROWID` 数据类型列的表。`ROWID` 通过 Base64 编码转换而成。 |
| URowid | 某些表的行具有非物理或永久地址，或者不是由 OceanBase 数据库生成的地址。例如，索引组织表的行地址存储在索引叶中，是可以移动的。索引组织表具有逻辑 `UROWID`，`UROWID` 存储在 `ROWID` 伪列中。 |

## 用户自定义数据类型

用户自定义数据类型包括：对象类型、数组、嵌套表。

| 类型 | 描述 |
| --- | --- |
| 对象类型 | 对象类型是应用程序处理的真实世界实体（例如采购订单）的抽象。对象类型作为 Schema 对象具有如下三种部分：   - 一个名称，是该 Schema 中对象类型的唯一标识。 - 属性，是内置类型或其他用户定义的类型。属性对现实世界实体的结构进行建模。 - 方法，是用 PL 编写并存储在数据库中的函数或存储过程。方法可以让应用程序对现实世界实体执行操作。 |
| 数组 | 数组是一组有序的数据元素。指定数组的所有元素都具有相同的数据类型。每个元素都有一个索引，即对应于该元素在数组中所在位置的一个数字。 数组中元素的数量就是数组的大小。数组的大小可变，所以被称为 Varray。声明数组时必须指定最大大小。 当声明一个数组时，它不会分配空间，而是定义了一个类型，可以将其用于如下场景：   - 对象类型属性。 - PL 变量、参数或函数返回类型。 |
| 嵌套表 | 嵌套表类型对一组无序的元素进行建模。元素可以是内置类型或用户定义类型。您可以将嵌套表作为单列表，如果嵌套表是对象类型，则可以作为多列表，对象类型的每个属性都对应一列。 嵌套表定义不分配空间。它定义了一个类型，您可以使用它来声明：   - 对象类型属性。 - PL 变量、参数或函数返回类型。 |

## 示例

### 示例 1

下述用例对字符、数值、日期等常用数据类型，在 OceanBase 数据库环境中进行了验证。

1. 创建 `t_data_types`。

   ```unknow
   CREATE TABLE t_data_types(
     id number NOT NULL PRIMARY KEY,
     c_char char(100),
     c_varchar varchar2(100),
     c_nchar nchar(100),
     c_nvarchar nvarchar2(100),
     c_numeric numeric(10, 2),
     c_int int,
     c_float float(2),
     c_binary_float binary_float,
     c_binary_double binary_double,
     c_raw raw(2000),
     c_blob blob,
     c_clob clob,
     c_date date,
     c_timestamp timestamp,
     c_timestamp2 timestamp WITH time ZONE,
     c_timestamp3 timestamp WITH LOCAL time zone,
     c_interval_year INTERVAL YEAR TO MONTH,
     c_interval_day INTERVAL DAY TO SECOND
   );

   ```
 2. 将数据插入 `全类型表` 。

   ```unknow
   INSERT INTO
     t_data_types
   VALUES
     (
       1,
       '二',
       '三',
       '四',
       5,
       6,
       7.0,
       8.0,
       9.0,
       10.0,
       utl_raw.cast_to_raw('17'),
       to_blob('18'),
       to_clob('19'),
       date '1970-11-11',
       TO_TIMESTAMP('1970-12-12 12:12:12', 'YYYY-MM-DD HH24:MI:SS'),
       TIMESTAMP '1970-02-13 13:13:13.123',
       TIMESTAMP '1970-02-14 14:14:14.123',
       INTERVAL '12-3' YEAR TO MONTH,
       INTERVAL '16 16:16:16' DAY TO SECOND
     );

   ```
 3. 查询 `全类型表`。

   ```unknow
   obclient> select * from t_data_types;
   +----+------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------+------------+-----------+-------+---------+----------------+-----------------+-------+--------------+--------+-----------+------------------------------+-------------------------------------+------------------------------+-----------------+---------------------+
   | ID | C_CHAR                                                                                               | C_VARCHAR | C_NCHAR                                                                                                | C_NVARCHAR | C_NUMERIC | C_INT | C_FLOAT | C_BINARY_FLOAT | C_BINARY_DOUBLE | C_RAW | C_BLOB       | C_CLOB | C_DATE    | C_TIMESTAMP                  | C_TIMESTAMP2                        | C_TIMESTAMP3                 | C_INTERVAL_YEAR | C_INTERVAL_DAY      |
   +----+------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------+------------+-----------+-------+---------+----------------+-----------------+-------+--------------+--------+-----------+------------------------------+-------------------------------------+------------------------------+-----------------+---------------------+
   |  1 | 二                                                                                                   | 三        | 四                                                                                                     | 5          |         6 |     7 |       8 |       9.0E+000 |        1.0E+001 | 3137  | 18           | 19     | 11-NOV-70 | 12-DEC-70 12.12.12.000000 PM | 13-FEB-70 01.13.13.123000 PM +08:00 | 14-FEB-70 02.14.14.123000 PM | +12-03          | +16 16:16:16.000000 |
   +----+------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------+------------+-----------+-------+---------+----------------+-----------------+-------+--------------+--------+-----------+------------------------------+-------------------------------------+------------------------------+-----------------+---------------------+
   1 row in set

   ```

### 示例 2

下述以对象类型为例，在 ODC 平台与 OceanBase 数据库中对用户自定义数据类型进行了验证。

1. 在 ODC 的 SQL 窗口中，创建 `data_type` 表。

   ![Image 1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.Application-development-based-on-Oracle-mode/3.Create-and-manage-database-objects/05.Data-type/1.png)
 2. 在 ODC 的 SQL 窗口中，将 `data_type` 表中插入数据。

   ![Image 2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.Application-development-based-on-Oracle-mode/3.Create-and-manage-database-objects/05.Data-type/2.png)
 3. 在 ODC 的 SQL 窗口中，创建自定义类型 `ob_var`。

   ![Image 3](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.Application-development-based-on-Oracle-mode/3.Create-and-manage-database-objects/05.Data-type/3.png)
 4. 在 ODC 的 SQL 窗口中，创建存储过程 ，并调用自定义类型 `ob_var`。

   ![Image 4](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.Application-development-based-on-Oracle-mode/3.Create-and-manage-database-objects/05.Data-type/4.png)
 5. 运行自定义数据类型。

   ![Image 5](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.Application-development-based-on-Oracle-mode/3.Create-and-manage-database-objects/05.Data-type/5.png)

   > **说明**
   >
   >  
   >
   > 也可以在命令行中运行上述代码。
   >
   >  
   >
   > ```unknow
   > create table data_type (id number(10),name varchar2(50),age int,address varchar2(50),salary float);//
   >
   > insert into data_type values(1,'baba',20,'hangzhou',3000.00);//
   >
   > create or replace type ob_var as object(
   >   var varchar2(10),
   >   var1 varchar(10)
   > );//
   >
   > create or replace procedure p_datatype is
   > begin
   >   declare
   >     rec data_type%rowtype;
   >     v_age rec.age%type;
   >     var varchar2(50);
   >     v_name var%type;
   >     v_salary data_type.salary%type;
   >
   >     type salary is table of number index by varchar2(20);
   >     arr salary;
   >     v_arr arr%type;
   >
   >     CURSOR c2 IS SELECT name, age FROM data_type;
   >     c_row c2%rowtype;
   >     v_rec c_row%type;
   >
   >     ob ob_var;
   >     v_obj ob%type;
   >   begin
   >     v_name := 'ali ';
   >     v_age := 30;
   >     v_salary := 2000;
   >     dbms_output.put_line('被引用项: 变量，记录，表列名称: ' || v_name  ||  ' * ' || v_age || ' * ' || v_salary);
   >
   >     v_arr('James') := 78000;
   >     dbms_output.put_line('被引用项: 集合变量的名称: ' || v_arr.FIRST);
   >
   >     open c2;
   >     fetch c2 into v_rec;
   >     dbms_output.put_line('被引用项: 游标变量名称: ' || v_rec.name || ' *  ' || v_rec.age);
   >     close c2;
   >
   >     v_obj:=ob_var('test','object');
   >     dbms_output.put_line('被引用项: 对象实例的名称: ' || v_obj.var || ' *  ' || v_obj.var1);
   >   end;
   > end;
   > //
   >
   > set serveroutput on;
   >
   > begin
   >   p_datatype;
   > end;
   > //
   >
   > ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
