Oracle环境变量NLS_LANG

NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性。对于非英语的字符集,NLS_LANG的设置就非常重要。

NLS:‘National
Language Support (NLS)’
当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特有的一些表达形式,比如我们选择chinese,那么它的中文字符
如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了。

NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characterset>
NLS_Language 指定:
- Oracle(错误)信息的语言
- 日和月份的名称
注意:NLS_LANGUAGE与插入和查询的*数据*的语言无关。

NLS_Territory 指定:
- 货币和数字格式
- 计算星期和天数的范围和惯例

客户端字符集(CLIENTS CHARACTERSET):
- 定义Oracle客户端,客户应用使用的编码
* 或者它要符合您Microsoft Windows代码页 (GUI工具的ACP, 命令提示符的CHCP 值)
* 或者为Unicode WIN32应用设置为UTF8/AL32UTF8。

常见的值可以参见Oracle Database Client Globalization Support

Windows中设置NLS_LANG

1.命令提示符中设置为环境变量

如果您在命令行中设置NLS_LANG为环境变量,它将覆盖注册表和系统属性中的NLS_LANG的定义。在命令提示符中,使用“set”命令,例如:

LANGUAGE设置为中文时,提示如下:

C:\Users\TianPan>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

C:\Users\TianPan>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 28 10:07:21 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

SQL> conn scott/tiger
已连接。

SQL> select sysdate from dual;

SYSDATE
--------------
28-11月-14

当Language设置为American时,提示信息则变为英文:

C:\Users\TianPan>set nls_lang=AMERICAN_AMERICA.ZHS16GBK

C:\Users\TianPan>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 28 10:07:51 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

SQL> conn scott/tiger
Connected.
SQL> select sysdate from dual;

SYSDATE
------------
28-NOV-14

在Windows下通过set nls_lang来设置,只是Session级别的,关闭cmd窗口后再打开,就又变为原来的设置了。如需永久生效,可以修改注册表的参数。

2.注册表设置(永久生效)

默认情况下,windows上的Oracle安装使用注册表来定义这个设置。
版本 10g 及以上:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<oracle_home_name>
这里您会看到一个条目名为NLS_LANG

在64位windows平台上安装32位软件,会使用32位兼容性路径
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_<oracle_home_name>

3.操作系统环境变量

尽管注册表是Microsoft Windows设置的主要存储位置,它不是唯一可以设置参数的地方。

虽然不推荐,但您可以设置NLS_LANG为系统属性中的系统或者用户变量。这个设置会被所有Oracle home使用。

设置位置: ‘我的电脑‘ -> ‘属性‘ > ‘高级‘  -> ‘环境变量‘

因为这些环境变量比注册表中已经设置的参数级别高,所以除非您有非常好的理由否则不要在这个位置设置Oracle参数。

Linux/Unix下的设置

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

 

DB中的NLS_LANG
DB也有自己的NLS_LANG参数,来标识数据库的语言,地域,字符集。可以通过以下的SQL来查得,
SELECT * FROM v$nls_parameters; 
OR
SELECT USERENV (‘language‘) FROM DUAL;

客户端的NLS_LANG和DB的NLS_LANG
DB的NLS_LANG和客户端环境变量中NLS_LANG尽可能的保持一致。Setting the NLS_LANG Environment Variable for Oracle Databases 提供了如何保持一致的方法。
那么为什么要保持一致呢?那是因为如果字符集不匹配,有可能在DB和Client间相互转换的过程中,出现字符转换错误的情况。比如Oracle nls_lang tips中举的例子。

更详细的内容可以参考下边这些材料:

Microsoft Windows 环境中NLS_LANG的正确设置 (Doc ID 1577370.1)

在 Unix 环境中正确设置 NLS_LANG (Doc ID 1548858.1)

NLS_LANG Explained (How does Client-Server Character Conversion Work?) (Doc ID 158577.1)

NLS_LANG FAQ

Oracle Database Client Globalization Support
Setting the NLS_LANG Environment Variable for Oracle Databases

Oracle nls_lang tips

转载请注明出处:http://blog.csdn.net/pan_tian/article/details/7745717

======EOF======

时间: 2024-10-09 21:13:22

Oracle环境变量NLS_LANG的相关文章

Oracle 环境变量NLS_LANG

NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性.对于非英语的字符集,NLS_LANG的设置就非常重要. NLS:'National Language Support (NLS)' 当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特有的一些表达形式,比如我们选择chinese,那么它的中文字符如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了. NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Terr

Linux下设置oracle环境变量

Linux设置Oracle环境变量 方法一:直接运行export命令定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义. 以设置oracle环境变量为例 export ORACLE_BASE=/data/app/oracle; export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1; export ORACL

Oracle环境变量设置脚本

每次都傻乎乎的往bashrc里面写环境变量,感觉不任性.于是,看了本书了解了/etc/oratab这个东东后,参考着书也写了一个设置Oracle环境变量的脚本. 在/etc/下创建oraset,权限设置为chown oracle:oinstall /etc/oraset oraset内容: #!/bin/bash # Sets Oracle environment variables. # Setup: 1. Put oraset file in /etc(Linux), in /var/opt

环境变量NLS_LANG

NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性.对于非英语的字符集,NLS_LANG的设置就非常重要.NLS:‘National Language Support (NLS)’ 当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特有的一些表达形式,比如我们选择chinese,那么它的中文字符如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了. NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Terri

Linux下oracle环境变量无效问题

今天在维护oracle数据库时,查看监听的状态,执行 #lsnrctl status 报错: -bash:lsnrctl:command not found.以前并不会这样,仔细想了一下,问题找到了,我是以root远程登录到服务器上,维护oracle时,直接 su oracle,这样操作虽然用户切换为oracle,但是环境变量仍然是root的环境变量,所以会报环境变量错误,正确的命令是su - oracle,这样环境变量也会切换为oracle的环境变量.看一下 su 命令的 man page N

那些你不太注意的 oracle 环境变量和标识

sign(?) 代表 ORACLE_HOME 环境变量 eg: SQL> ALTER TABLESPACE TEMP ADD DATAFILE '?/dbs/temp02.dbf' SIZE 200M: sign (@) 代表 ORACLE_SID 环境变量 eg: SQL> ALTER TABLESPACE tablespace_name ADD DATAFILE [email protected] ------oracle 软件运行环境变量 --ORACLE_TRACE   在安装期间跟踪

oracle环境变量详解

通常情况下,ORACLE_SID这个环境变量全称Oracle System Identifier,,用于在一台服务器上标识不同的实例,默认情况下,实例名就是ORACLE_SID的值(即INSTANCE_NAME=$ORACLE_SID.当然实例名也可以不同于ORACLE_SID这个环境变量,只要在初始化参数文件里显示指定INSTANCE_NAME参数值不同于ORACLE_SID环境变量的值即可).在UNIX/Linux平台下,该环境变量主要作用是同ORACLE_HOME这个环境变量做hash运算

oracle 环境变量配置 字符集编码配置

字符编码的环境变量配置: http://jingyan.baidu.com/article/e73e26c0c20f1a24adb6a73e.html (1).数据库服务器字符集select * from nls_database_parameters (2).客户端字符集环境select * from nls_instance_parameters 步骤: SQL>conn /as sysdba SQL>shutdown immediate; SQL>startup mount SQL

RHEL ORACLE 环境变量

export TMP=/tmpexport TMPDIR=$TMPexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1export ORACLE_SID=[sid]export ORACLE_TERM=xtermexport PATH=/usr/sbin:$ORACLE_HOME/bin:.:$ORACLE_HOME/OPatch:$PATHexport LD_LIBRA