在oracle中,如何更改会话以显示UTF8?

时间:2010-01-04 10:44:24

标签: oracle utf-8

我无法弄清楚Oracle的生命加密语法。这是Oracle 10g

我的会话的NLS_LANGUAGE目前默认为AMERICAN。 我需要能够显示UTF8字符。

以下是我的一些尝试,都不正确:

ALTER SESSION SET NLS_LANGUAGE='UTF8'
ALTER SESSION SET NLS_LANGUAGE='AMERICAN_AMERICA.UTF8'

什么是秘密命令?

3 个答案:

答案 0 :(得分:13)

字符集是语言环境的一部分,由NLS_LANG的值决定。作为the documentation makes clear,这是操作系统变量

  

NLS_LANG被设置为环境   UNIX平台上的变量。 NLS_LANG   在Windows上的注册表中设置   平台。

现在我们可以使用ALTER SESSION更改几个语言环境元素的值,NLS_LANGUAGE和NLS_TERRITORY。但不是,唉,字符集。这种差异的原因是 - 我认为 - 语言和领域只会影响Oracle如何解释存储的数据,例如:显示大数字时是否显示逗号或句点。字符集的轮廓与客户端应用程序如何呈现显示的数据有关。此信息在启动时由客户端应用程序选取,不能从内部更改。

答案 1 :(得分:9)

好的,按http://www.oracle.com/technology/tech/globalization/htdocs/nls_lang%20faq.htm

  

ALTER无法更改NLS_LANG   会话,NLS_LANGUAGE和   NLS_TERRITORY可以。然而   NLS_LANGUAGE和/或NLS_TERRITORY   不能设置为“独立”   环境中的参数或   在客户端注册。

显然,“正确”的解决方案是,在登录Oracle之前,设置以下环境变量:

export NLS_LANG=AMERICAN_AMERICA.UTF8

Oracle因可用性而获得了巨大的成功。

答案 2 :(得分:3)

因此,在操作系统上启动“$ sqlplus ”之前,请运行以下命令:

  • 在Windows上

    设置NLS_LANG = AMERICAN_AMERICA.UTF8

  • 在Unix上(Solaris和Linux,centos等)

    导出NLS_LANG = AMERICAN_AMERICA.UTF8

建议在'.bash_profile'[启动脚本]中设置env变量

这是通常设置其他ORACLE env变量(ORACLE_SID,ORACLE_HOME)的地方。

只是fyi - SQL Developer 擅长显示/处理非英语UTF8字符。