更改 Oracle 数据库的语言(代码页)

更改 Oracle 数据库的语言(代码页)

我们有两个 Oracle DB,设置为:

SQL> SELECT USERENV ('language') FROM DUAL;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8

我们其余实例的设置如下:

SQL> SELECT USERENV ('language') FROM DUAL;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.WE8ISO8859P1

这在将数据从一个数据库发送到另一个数据库时产生了各种问题。是否可以转换两个“非标准”数据库以匹配其他数据库。如果可以,怎么做?

答案1

嗯,第一个字符集是 Unicode,它基本上支持所有语言。第二个字符集(“P1”)是西欧 ASCII,支持英语和一些额外的西方字符。

所以,

  • 您的数据是什么语言的?您需要支持哪些语言?
  • 您想将 UNICODE db 转换为 ASCII db 还是反之?

通过导出(将 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 导入数据。

相关内容