我们有两个 Oracle DB 设置为:
SQL> SELECT USERENV ('language') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
我们的其余实例设置如下:
SQL> SELECT USERENV ('language') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.WE8ISO8859P1
这在从一个数据库发送到另一个数据库的数据中产生了各种问题。是否可以将两个“非标准”数据库转换为与其他数据库匹配。如果是这样,怎么做?
嗯,第一个字符集是Unicode,基本支持所有语言。第二个(“P1”)是西欧 ASCII,支持英语和一些额外的西方字符。
所以,
通过导出(将 NLS_LANG 设置为 WE8..P1)、创建一个新的空数据库并导入(再次将 NLS_LANG 设置为 WE8..P1),可以轻松地将 WE8...P1 转换为 Unicode。但是,转换为 Unicode 有一些副作用,特别是关于任何 varchar2 列的限制 - 如果它是 varchar2 (20),它通常意味着 20 个字节,所以当使用 Unicode 时,20 个字节可以容纳更少的(非英文)字符。 . 所以,为了避免数据截断,一些列可能需要放大......所有细节都在这里:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28298/ch11charsetmig.htm
再次从 UTF8 转换为 WE8..P1,使用 NLS_LANG=WE8...P1 进行导出(您现在将丢失所有未映射到 P1 ASCII 的字符,如阿拉伯语、中文等),创建一个空的 We8.. P1 数据库并使用 NLS_LANG=WE8ISO8859P1 导入数据。