2010-01-04 27 views
13

我无法弄清楚Oracle的加密语法为我的生活。这是Oracle 10g在oracle中,如何更改会话以显示UTF8?

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

下面是我的一些尝试,所有不正确的:

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

秘诀是什么命令?

+0

数据库配置为保存UTF8吗?什么是数据库NLS_LANG设置? – 2010-01-04 11:52:54

+1

是的,配置为保存UTF8。 – 2010-01-04 19:44:20

回答

13

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

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

现在我们可以使用ALTER SESSION来更改几个区域设置元素NLS_LANGUAGE和NLS_TERRITORY的值。但是,不,唉,字符集。造成这种差异的原因是 - 我认为 - 语言和地域只是影响Oracle如何解释存储的数据,例如在显示大量数字时是否显示逗号或句点。 Wheareas字符集关心客户端应用程序如何呈现显示的数据。此信息在启动时由客户端应用程序拾取,并且不能从内部更改。

+6

我对WHY的理解有所不同。在建立与数据库的sql * net连接之前,必须确定客户端的字符集,以便可以使用正确的字符集转换。 – 2010-01-04 22:14:46

9

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

NLS_LANG无法通过ALTER改变 SESSION,NLS_LANGUAGE和NLS_TERRITORY 即可。但是, NLS_LANGUAGE和/或NLS_TERRITORY 不能在客户端的注册表中设置为“独立” 环境参数或 注册表。

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

export NLS_LANG=AMERICAN_AMERICA.UTF8 

甲骨文获得的可用性一个大胖子F。

+0

UTF8是Windows的正确选择吗?文档指出AL32UTF8取代它,并且没有UTF-8 windows客户端:“... UTF8已被AL32UTF8取代,不要使用UTF8作为XML数据。” [1](http://docs.oracle.com/cd/B28359_01/install.111/b32006/gblsupp.htm#BABDHCGD)“如果数据库字符集是AL32UTF8,并且客户机在Windows操作系统上运行,则您不应将AL32UTF8设置为NLS_LANG参数中的客户端字符集,因为没有UTF-8 WIN32客户端。“ [2](http://docs.oracle.com/cd/B28359_01/server.111/b28298/ch3globenv.htm#i1006330) – 2014-01-23 19:42:19

2

因此,在OS启动 '$ sqlplus中' 之前,运行如下:

  • 在Windows

    集NLS_LANG = AMERICAN_AMERICA.UTF8

  • 在Unix(Solaris和Linux,centos等)

    export NLS_LANG = AMERICAN_AMERICA.UTF8

在你的'中设置env变量也是明智的。bash_profile'[在启动脚本]

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

just fyi - SQL Developer擅长显示/处理非英文UTF8字符。