为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】: 【操作系统】: 【CPU】: 【问题描述】*: 将VARCHAR变更成longvarchar或者text报错,JSON_DATA字段是从mysql json类型迁移过来的,在mysql中是json,迁移过来是varchar
在手头测试库试了一下,确实有这个情况,Oracle也有类似结果。
你试下新增字段然后复制数据的办法是否能够满足需要。 我测试过程如下:
--新增测试表 drop table if exists t_conv; create table t_conv ( a int, b varchar2(32767) ); --插入测试用数据 insert into t_conv values(1,'a;lsdfalsdfj;qewjv;ekv;ekfvne;lrn'); commit; --这样直接修改列类型会返回执行失败信息 --alter table t_conv modify b text; --首先添加一个目标数据类型的新列 alter table t_conv add b_conv text; --用update语句,将原列内容复制到新列中 update t_conv set b_conv = b; commit; --下面两个操作必选其一,目的是腾出原列名 --drop掉原列 alter table t_conv drop column b; --或者修改原列列名,这样方便后面核对数据转换是否正确 alter table t_conv rename column b to b_bak; --将转换后新列的列名修改为原列名,这样等同于修改了原列的数据类型 alter table t_conv rename column b_conv to b; --查询表中数据,验证类型转换是否正确 select * from t_conv;
在手头测试库试了一下,确实有这个情况,Oracle也有类似结果。
你试下新增字段然后复制数据的办法是否能够满足需要。
我测试过程如下:
--新增测试表 drop table if exists t_conv; create table t_conv ( a int, b varchar2(32767) ); --插入测试用数据 insert into t_conv values(1,'a;lsdfalsdfj;qewjv;ekv;ekfvne;lrn'); commit; --这样直接修改列类型会返回执行失败信息 --alter table t_conv modify b text; --首先添加一个目标数据类型的新列 alter table t_conv add b_conv text; --用update语句,将原列内容复制到新列中 update t_conv set b_conv = b; commit; --下面两个操作必选其一,目的是腾出原列名 --drop掉原列 alter table t_conv drop column b; --或者修改原列列名,这样方便后面核对数据转换是否正确 alter table t_conv rename column b to b_bak; --将转换后新列的列名修改为原列名,这样等同于修改了原列的数据类型 alter table t_conv rename column b_conv to b; --查询表中数据,验证类型转换是否正确 select * from t_conv;