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。

 
 
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的更多相关文章

  1. Oracle 环境变量NLS_LANG

    NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性.对于非英语的字符集,NLS_LANG的设置就非常重要.NLS:'National Language Support (NLS)' 当我 ...

  2. 设置 Unix,Linux环境下的NLS_LANG

    设置 NLS_LANG 变量 1) 正确配置 LC_ALL 参数 2) 配置 telnet/ssh/SecureCRT 客户端的字符集 linux中可以用locale命令来查看 NLS_LANG设置, ...

  3. 环境变量NLS_LANG

    NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性.对于非英语的字符集,NLS_LANG的设置就非常重要.NLS:‘National Language Support (NLS)’ 当我 ...

  4. [转]nls_lang设置

    1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characters ...

  5. NLS_LANG参数说明

    NLS_LANG参数说明 格式:  NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NLS子集的特性.其中: Lang ...

  6. PLSQL往Oracle数据库插入中文后变为问号 和 启动PLSQL时提示NLS_LANG在客户端不能确定的解决办法

    PLSQL往Oracle数据库插入中文后变为问号 和 启动PLSQL时提示NLS_LANG在客户端不能确定的解决办法 1.检查服务器的字符编码 Select * from V$NLS_PARAMETE ...

  7. Oracle 客户端 NLS_LANG 的设置(转)

    1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characters ...

  8. NLS_LANG SIMPLIFIED CHINESE_CHINA.AL32UTF8 和american_america.AL32UTF8

    oadb01:/home/oracle> echo $NLS_LANG SIMPLIFIED CHINESE_CHINA.AL32UTF8 oadb01:/home/oracle> sql ...

  9. pl sql 查询显示乱码解决方法——设置环境变量NLS_LANG

    用oracle进行查询的时候,有的时候会出现查询结果为乱码的情况,此时要设置一个环境变量NLS_LANG. 此变量的值如何获得呢?运行下面sql语句就可以获得: select userenv('lan ...

随机推荐

  1. C#绘制传感器代码

    //以下代码添加到任一窗口下即可        private int 旋转角度 = 0;        private int 边长 = 10;        protected override ...

  2. Kafka报错-as it has seen zxid 0x83808 our last zxid is 0x0 client must try another server

    as it has seen zxid 0x83808 our last zxid is 0x0 client must try another server 停止zookeeper,删除datadi ...

  3. PV IP UV的概念介绍

    IP(独立IP):指独立IP数,不同的IP地址的计算机访问网站的总次数,这个是网站流量分析的一个重要指标.00:00-24:00内相同的IP地址只被计算一次 假如说:赶集网的日独立IP300W,则至少 ...

  4. GPL 和BSD和Apache

    开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别<ignore_js_op> 以下是上述协议的简单介绍:BSD开源协议BSD开源协议是一个给于使用者很大自由的 ...

  5. Python 2.7_pandas连接MySQL数据处理_20161229

    在我本地Mysql_local_db数据库建立了一个pandas数据表用来对pandas模块的学习 学习过程借鉴学习蓝鲸的网站分析笔记 1.创建表 CREATE TABLE pandastest( 城 ...

  6. sys模块和os模块,利用sys模块生成进度条

    sys模块import sysprint(sys.argv)#sys.exit(0)             #退出程序,正常退出exit(0)print(sys.version)       #获取 ...

  7. web初学之重定向与请求转发

    重定向与请求转发的问题 (1)RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法. (2 ...

  8. Git下载Spring项目源码并编译为Eclipse

    1)当前系统中安装了gradle,如果为安装,可以从:http://www.gradle.org/downloads,,下载完后进行解压到任意盘符,然后增加环境变量GRADLE_HOME,并在环境变量 ...

  9. RadGrid使用技巧:从RadGrid获取绑定的值

    本文主要介绍从RadGrid获取绑定的值,仅适用于Telerik RadControls for asp.net ajax. 获取方式 RadGrid把绑定的值存储在VIewState中,即使View ...

  10. LDAP binary字段读取

    今天做LDAP发布图片,用binary属性存储.存储没有问题,但是读取时发现字段变成String形式并且内容是乱码,怎么转换都不能解决. 最后度了下发现 默认情况下Attribute#get()返回的 ...