OceanBase 为啥不能在线ddl将null 字段改成not null的,原因是什么

【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】3.2.3
【问题描述】OceanBase 为啥不能在线ddl将null 字段改成not null的,原因是什么
【复现路径】
mysql> alter table test1 modify column task_sub_type tinyint(4) not null default 1;
ERROR 1146 (42S02): Table ‘test.test1’ doesn’t exist

mysql> create table test2(id int primary key ,name varchar(100) null );
Query OK, 0 rows affected (0.12 sec)
mysql> alter table test2 modify column name varchar(100) not null default ‘cc’;
ERROR 1138 (22004): Invalid use of NULL value
【问题现象及影响】

【附件】

not null,对于已经存在的null记录,如何保证not null?
这不是逻辑上就过不去吗?

oracle租户可以设置,mysql租户不行。
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357180
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357190

确实逻辑有问题的,但是我的表是没有null的 或者说有null的都删除了,这种情况下mysql是可以修改成not null的,但是ob还是不可用的,这个是应该是ob的问题了

这时候会出现ORA-02296 CANNOT ENABLE (OWNER.TABLENAME) - null values found。

看我发的连接,明确说明MySQL兼容模式不支持

好的

可以实现更优雅,没有时支持。有null报错。
可以给官方提issue

在开源ob4.x版本测试是支持的。

1 个赞