---
title: "列类型变更规则 - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: 列类型变更规则 在 OceanBase 数据库 MySQL 模式下进行列类型变更时，需要首先考虑表级的列类型变更规则，特别是一些数据类型的禁用场景。其次是考虑列类型变更中源数据类型和目标数据类型的变更规则。 表级列类型变更规则 禁用规则 外键约束 对于 Online DDL 和 Offline DDL，除以下特殊情况…
---
切换语言

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

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

# 列类型变更规则

更新时间：2026-07-15 20:42:47

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/700.ddl-function-of-mysql-mode/900.column-type-change-rule-of-mysql-mode.md)  

在 OceanBase 数据库 MySQL 模式下进行列类型变更时，需要首先考虑表级的列类型变更规则，特别是一些数据类型的禁用场景。其次是考虑列类型变更中源数据类型和目标数据类型的变更规则。

## 表级列类型变更规则

### 禁用规则

- 外键约束

  对于 Online DDL 和 Offline DDL，除以下特殊情况（需要注意，所涉及的类型修改只改变显示精度，而不改变存储结构）的其他场景都不支持修改外键列类型。

     - 如果列的数据类型是 `FLOAT(m,n)`，则支持更改精度大小，但不支持 `SIGNED` 和 `UNSIGNED` 的互相转换。
     - 如果列的数据类型是 `DOUBLE(m,n)`，则支持更改精度大小，但不支持 `SIGNED` 和 `UNSIGNED` 的互相转换。
     - 如果列的数据类型是 `VARCHAR(m)`，则支持改大精度，不支持改小精度，并且不支持改成 `CHAR` 类型。
 - `CHECK` 约束

  对于 Online DDL 和 Offline DDL，对于带有 `CHECK` 约束的整型列，当列类型修改为取值范围更大的整型列类型时（如从 INT 修改为 BIGINT），可以通过 Online 的方式变更；其他带有 `CHECK` 约束的列仍不支持修改列类型。
 - Trigger 约束

  仅针对 Offline DDL，当列上有非 `DISABLE` 的 Trigger 约束时，禁止修改列类型；如果全部是 `DISABLE` 的 Trigger，则不影响 DDL 操作，并且新表里需要包含此 `DISABLE` 的 Trigger。

### 变更规则

- 在相同数据类型长度变长的情况下，（例如将某一列的数据类型 `CHAR` 更改为 `CHAR(11)`，由于 OceanBase 数据库存储 `CHAR` 的方式可以是 Online 操作，也不需要重写数据。）如果该列上只有索引表，那么可以通过 Online 的方式修改索引列的长度，但如果该列修改了主键或者分区键，则还是应该执行 Offline 操作，即" **同类型变长有主键，分区键要 Offline** "。

     - 对于 `VARCHAR` 类型的长度变长，可以通过 Online 的方式变更，但是需要同时修改索引表等相关依赖对象的 Schema。需要注意的是，这种情况下即使变更了主键或者分区键，也可以是 Online 方式的，即" **用户预期数据不发生变化，但依赖对象中的 Schema 也要跟着改掉** "。
     - 对于整型类型的长度变长，可以通过 Online 的方式变更，支持普通列、主键列、分区键、索引列、生成列依赖的列和带有 `CHECK` 约束的列。  

  #### 注意

  对于字符类型列的长度变更，虽然通常情况下索引列的类型变更可以 Online 进行，但对于前缀索引（即索引只包含列值的一部分）而言则是一个例外。
 - 在 OceanBase 数据库中，对于列类型为数值数据类型、字符数据类型、时间数据类型的变更，如果该列没有被索引表、外键、主键、分区键等引用的情况，可以通过 Online 的方式变更；如果被依赖对象引用，则需要通过 Offline 的方式，即" **大类型变更有依赖对象要 Offline"。**
 - 在 OceanBase 数据库中，对于列类型为整型类型，那么外键列、被外键依赖的列和生成列不支持修改列类型。
 - 对于数值数据类型，如果出现 `SIGNED` 和 `UNSIGNED` 的转换，在允许类型变更的情况下，需要执行 Offline 操作；对于字符数据类型，如果出现字符集和字符序 Collation 变更，在允许列类型变更的情况下，需要执行 Offline 操作。
 - 当某一列被生成列引用时，允许列类型的变更操作。

## 列级转换规则

在 OceanBase 数据库中，所有列数类型分为三个大类，分别是数值数据类型、字符数据类型和时间数据类型。这三个大类内的转换规则是类似的，每种大类之间的变更规则也是类似的，但是也有一些特殊情况。

如下各表分别列举每种大类内部的和大类之间的转换情况。

### 数值数据类型大类内的转换

数值数据类型分为：

- 整型：`TINYINT`、`SMALLINT`、`MEDIUMINT`、`INT`、`BIGINT`
 - 浮点型：`FLOAT`、`DOUBLE`
 - 定点型：`NUMBER`
 - 二进制：`BIT`

如下表格为数值数据类型大类内的转换情况。

| 数据类型 | To TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT | To FLOAT、DOUBLE | To NUMBER | To BIT |
| --- | --- | --- | --- | --- |
| 整型 | 支持 | 支持 | 支持 | 支持 |
| 浮点型 | 支持 | 支持 | 支持 | 支持 |
| 定点型 | 支持 | 支持 | 支持 | 支持 |
| 二进制 | 支持 | 支持 | 支持 | 支持 |

### 字符数据类型大类内的转换

字符数据类型分为：

- `CHAR`、`VARCHAR`
 - `BINARY`、`VARBINARY`
 - `TEXT` 大类型：`TINYTEXT`、`MEDIUMTEXT`、`TEXT`、`LONGTEXT`
 - `BLOB` 大类型：`TINYBLOB`、`MEDIUMBLOB`、`BLOB`、`LONGBLOB`
 - `ENUM`、`SET`

如下表格为字符数据类型大类内的转换情况。

| 数据类型 | To CHAR | To BINARY | To VARCHAR\ VARBINARY | To TEXT\ BLOB | To ENUM\ SET |
| --- | --- | --- | --- | --- | --- |
| `CHAR` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `BINARY` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `VARCHAR`、 `VARBINARY` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `TEXT`大类型、 `BLOB` 大类型 | 支持 | 支持 | 支持 | 支持 | 支持 |
| `ENUM`、 `SET` | 支持 | 支持 | 支持 | 支持 | 支持 |

### 时间类型大类内的转换

时间数据类型分为：

- `DATE`
 - `TIMESTAMP`
 - `DATETIME`
 - `TIME`
 - `YEAR`

如下表格为时间类型大类内的转换情况。

| 数据类型 | To DATE | To TIMESTAMP | DATETIME | TIME | YEAR |
| --- | --- | --- | --- | --- | --- |
| `DATE` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `TIMESTAMP` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `DATETIME` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `TIME` | 支持 | 支持 | 支持 | 支持 | 支持 |
| `YEAR` | 支持 | 支持 | 支持 | 支持 | 支持 |

### 数值型大类和字符型大类间的转换

数值型大类和字符型大类间的转换情况如下表所示。

| 数据类型 | To 整型、浮点型、定点型 | To BIT 类型 | To CHAR、BINARY、 VARCHAR 、VARBINARY、 TEXT 大类、 BLOB 大类 | To ENUM、SET |
| --- | --- | --- | --- | --- |
| 整型、浮点型、定点型 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 支持 | 支持 |
| `BIT` 类型 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 支持 | 支持 |
| `CHAR`、`BINARY` 、`VARCHAR` 、`VARBINARY` 、`TEXT` 大类、 `BLOB` 大类 | 支持 | 支持 | 参见大类内的转换规则。 | 支持 |
| `ENUM`、`SET` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |

### 数值型大类和时间大类间的转换

数值型大类和时间大类间的转换情况如下表所示。

| 数据类型 | To 整型、浮点型、定点型、`BIT` | To DATE | To DATETIME | To TIMESTAMP | To TIME | To YEAR |
| --- | --- | --- | --- | --- | --- | --- |
| 整型、浮点型、定点型、`BIT` | 参见大类内的转换规则。 | 支持 | 支持 | 支持 | 支持 | 支持 |
| `DATE` | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `DATETIME` | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `TIMESTAMP` | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `TIME` | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `YEAR` | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |

### 字符型大类和时间大类间的转换

字符型大类和时间大类间的转换情况如下表所示。

| 数据类型 | To CHAR、BINARY 、VARCHAR 、VARBINARY 、TEXT 大类、 BLOB 大类 | To ENUM、 SET | To DATE | To DATETIME | To TIMESTAMP | To TIME | To YEAR |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `CHAR`、`BINARY`、`VARCHAR`、`VARBINARY` 、`TEXT` 大类、`BLOB` 大类 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 支持 | 支持 | 支持 | 支持 | 支持 |
| `ENUM`、 `SET` | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 支持 | 支持 | 支持 | 支持 | 支持 |
| `DATE` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `DATETIME` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `TIMESTAMP` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `TIME` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |
| `YEAR` | 支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |

 上一篇 下一篇 ![有帮助](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) 咨询热线
