基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
修改表 ALTER TABLE 的不兼容点
更新时间:2026-04-14 15:40:37
本文为您介绍迁移 MySQL 数据库的数据至 OceanBase 社区版时,MySQL 数据库执行的 ALTER TABLE DDL 支持被 OceanBase 迁移服务(OceanBase Migration Service,OMS)的 DDL 同步组件转换,但 OceanBase 社区版不支持执行的场景。
行内 CHECK 表达式中引用了其它列
MySQL 数据库
不支持
ALTER TABLE ADD COLUM行内CHECK表达式中引用了其它列(所有类型)。支持
ALTER TABLE MODIFY/CHANGE COLUM行内CHECK表达式中引用了其它列(所有类型)。
OceanBase 社区版
不支持
ALTER TABLE ADD COLUM行内CHECK表达式中引用了其它列(所有类型)。不支持
ALTER TABLE MODIFY/CHANGE COLUM行内CHECK表达式中引用了其它列(所有类型)。警告
由于 OceanBase 社区版本身的限制,可能存在其它不支持的 CHECK 表达式。
修改列的类型
MySQL 数据库和 OceanBase 社区版的被修改列在有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 有约束的列修改类型。
MySQL 数据库和 OceanBase 社区版的被修改列在没有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 没有约束的列修改类型。
修改列的长度
MySQL 数据库和 OceanBase 社区版的被修改列在有约束的情况下,对修改列长度的限制有所不同。详情请参见 有约束的列修改长度。
MySQL 数据库和 OceanBase 社区版的被修改列在没有约束的情况下,对修改列长度的限制有所不同。详情请参见 没有约束的列修改长度。
修改列 NULLABLE 属性
MySQL 数据库
非约束情况下,支持通过 CHANGE / MODIFY COLUMN 将 NULLABLE 修改为 NOT NULL,支持修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。
注意
如果 NULLABLE 情况下存在 NULL 的数据,将无法修改 NULLABLE 为 NOT NULL。
OceanBase 社区版
非约束情况下,不支持通过 CHANGE / MODIFY COLUMN 将 NULLABLE 修改为 NOT NULL。
非约束情况下,支持修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。
修改字符集或者 COLLATION
MySQL 数据库:支持
OceanBase 社区版:不支持
删除有约束的列
MySQL数据库和 OceanBase 社区版对于删除有约束的列的操作限制有所不同,详情请参见 删除有约束的列。
CHANGE / MODIFY COLUMN NOT NULL 不支持和 COMMENT 语句同时存在
示例如下:
ALTER TABLE T MODIFY C INT NOT NULL, COMMENT 'INT COLUMN';
MySQL 数据库
非约束情况下,如果存在 COMMENT 语句,支持通过 CHANGE / MODIFY COLUMN 指定修改属性 NOT NULL、NULLABLE。
有 PK、UK、KEY 和 FULLTEXT 约束的情况下,如果存在 COMMENT 语句,指定 NULL 执行报错,支持 NOT NULL。
OceanBase 社区版
无论是否有约束,存在 COMMENT 语句的情况下,均不支持通过 CHANGE / MODIFY COLUMN 指定修改属性 NULLABLE -> NOT NULL、NOT NULL -> NOT NULL。
非约束情况下,支持指定修改属性 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE。
有 PK、UK、KEY 和 FULLTEXT 约束的情况下,如果存在 COMMENT 语句,指定修改属性 NOT NULL -> NULLABLE,执行不报错但未生效。