NVARCHAR到VARCHAR之间的转换

时间:2013-02-01 17:06:30

标签: oracle utf-8 nvarchar

我有一个Oracle数据库,所有字符列都定义为NVARCHAR或NCHAR或NCLOB,使用字符集UTF-16。

现在我想迁移到具有charset UTF-8的新数据库。因为它可以存储unicode字符,所以如果我能够导入数据转换列类型,我就会徘徊。

我怀疑的原因是我知道如果不是空的话,我无法在VARCHAR2中转换NVARCHAR2列。

执行导入的最佳选择是什么。如果我导入架构,修改列类型,那么datapump会抱怨吗?之后我会导入数据吗?

感谢

1 个答案:

答案 0 :(得分:0)

是的数据泵会对您提出的解决方案不满意。您需要使用to_char()或强制转换(MYNVARCHAR2作为VARCHAR2)来在导入之后或导出之前转换数据类型。据我所知,任何无法转换的字符都会变成'?',所以你必须小心不要转换任何包含非英文字母字符的数据。

最简单的方法是将数据导入到不同的模式中,然后在将数据复制到正确的已修改模式时转换数据。即。

  

impdp remap_schema = myschema:tempschema

     

插入myschema.mytable(从tempschema.mytable中选择myprimarykey,to_char(mynvarchar2));

但这显然会占用数据库中两倍的空间。