2013-02-01 69 views
2

我有一个Oracle数据库,所有字符列定义为NVARCHAR或NCHAR或NCLOB,使用字符集UTF-16。NVARCHAR到VARCHAR之间的转换

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

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

什么是执行导入的最佳选择。数据泵会抱怨如果我导入模式,修改列类型,然后我会导入数据?

谢谢

回答

0

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

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

IMPDP remap_schema = MYSCHEMA:tempschema

插入到myschema.mytable(选择从tempschema.mytable myprimarykey,TO_CHAR(mynvarchar2));

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