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

我们有两个Oracle数据库被设置为:

SQL> SELECT USERENV ('language') FROM DUAL; USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.AL32UTF8 

其余的例子如下:

 SQL> SELECT USERENV ('language') FROM DUAL; USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.WE8ISO8859P1 

这是在从一个数据库发送到另一个数据库中创build各种问题。 是否有可能转换两个“非标准”数据库来匹配其他人。 如果是这样,怎么样?

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

所以,

  • 你的数据是什么语言? 你需要支持哪些语言?
  • 你想要将UNICODE数据库转换为ASCII数据库或其他方式吗?

通过导出(将NLS_LANG设置为WE8..P1),创build一个新的空数据库并导入(再次将NLS_LANG设置为WE8..P1),可以很容易地将WE8 … P1转换为Unicode。 但是,转换为Unicode有一些副作用,尤其是关于任何varchar2列的限制 – 如果是varchar2(20),通常意味着20个字节,所以当使用Unicode时,20个字节可以容纳更less的(非英文)字符。因此,为了避免数据截断,有些列可能需要放大…所有的细节在这里:

http://download.oracle.com/docs/cd/B28359_01/server.111/b28298/ch11charsetmig.htm

再从UTF8转换到WE8..P1,用NLS_LANG = WE8 … P1(现在你将丢失所有不能映射成P1 ASCII的字符,比如阿拉伯文,中文等)导出,创build一个空的We8 .. P1数据库并用NLS_LANG = WE8ISO8859P1导入数据。