首批通过分布式安全可靠测评,为关键业务系统打造
列类型变更规则
更新时间:2026-03-20 09:46:32
在 OceanBase 数据库 MySQL 模式下进行列类型变更时,需要首先考虑表级的列类型变更规则,特别是一些数据类型的禁用场景。其次是考虑列类型变更中源数据类型和目标数据类型的变更规则。
表级列类型变更规则
禁用规则
外键约束
对于 Online DDL 和 Offline DDL,除以下特殊情况(需要注意,所涉及的类型修改只改变显示精度,而不改变存储结构)的其他场景都不支持修改外键列类型。
如果列的数据类型是
FLOAT(m,n),则支持更改精度大小,但不支持SIGNED和UNSIGNED的互相转换。如果列的数据类型是
DOUBLE(m,n),则支持更改精度大小,但不支持SIGNED和UNSIGNED的互相转换。如果列的数据类型是
VARCHAR(m),则支持改大精度,不支持改小精度,并且不支持改成CHAR类型。
CHECK约束对于 Online DDL 和 Offline DDL,OceanBase 数据库 MySQL 模式下带有
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 也要跟着改掉 "。在 OceanBase 数据库中,可能有相同大数据类型(即数值数据类型、字符数据类型、时间数据类型)的变更,如果该列没有被索引表、外键、主键、分区键等引用的情况,可以通过 Online 的方式变更;如果被依赖对象引用,则需要通过 Offline 的方式,即" 大类型变更有依赖对象要 Offline"。
对于数值数据类型,如果出现
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、VARCHARBINARY、VARBINARYTEXT大类型:TINYTEXT、MEDIUMTEXT、TEXT、LONGTEXTBLOB大类型:TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOBENUM、SET
如下表格为字符数据类型大类内的转换情况。
| 数据类型 | To CHAR | To BINARY | To VARCHAR\ VARBINARY | To TEXT\ BLOB | To ENUM\ SET |
|---|---|---|---|---|---|
CHAR |
支持 | 支持 | 支持 | 支持 | 支持 |
BINARY |
支持 | 支持 | 支持 | 支持 | 支持 |
VARCHAR、 VARBINARY |
支持 | 支持 | 支持 | 支持 | 支持 |
VARCHAR、 VARBINARY |
支持 | 支持 | 支持 | 支持 | 支持 |
TEXT大类型、 BLOB 大类型 |
支持 | 支持 | 支持 | 支持 | 支持 |
TEXT大类型、 BLOB 大类型 |
支持 | 支持 | 支持 | 支持 | 支持 |
ENUM、 SET |
支持 | 支持 | 支持 | 支持 | 支持 |
ENUM、 SET |
支持 | 支持 | 支持 | 支持 | 支持 |
时间类型大类内的转换
时间数据类型分为:
DATETIMESTAMPDATETIMETIMEYEAR
如下表格为时间类型大类内的转换情况。
| 数据类型 | 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 |
参见大类内的转换规则。 | 支持 | 支持 | 支持 | 支持 | 支持 |
整型、浮点型、定点型、BIT |
参见大类内的转换规则。 | 支持 | 支持 | 支持 | 支持 | 支持 |
整型、浮点型、定点型、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 |
支持 | 支持 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 | 参见大类内的转换规则。 |