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. 移动端rem页面详谈

    rem布局是移动端常见的布局之一,也是较为成熟的方案.接下来就详细说以下rem布局的实际操作. 1.首先加<meta />标签,设置视口的大小,不多说. <meta name=&qu ...

  2. MySQL临时表创建

    和SQL SERVER 创建临时表不同 不能直接写 Create table #Test_Table 而是需要在 Create 和 table 之间 加入 TEMPORARY(temporary< ...

  3. dev_set_draw的fill和margin模式

    注意:分别观察两张填充模式,一种是内部填充,一种是边缘填充.还有一种缺省的填充. Name dev_set_draw — Define the region fill mode. Signature ...

  4. NTFS u盘支持 - centos6

    uname -r bash-4.1# uname -r2.6.32-431.el6.x86_64 ---- http://repository.it4i.cz/mirrors/repoforge/re ...

  5. HPUX 只取syslog.log当前三天的信息

    LOG_DAYS=1todays_date=`date +%m:%d:%Y`current_date=`echo $todays_date | sed 's/://g'`day=`echo $toda ...

  6. C# MVC ( 添加路由规则以及路由的反射机制 )

    在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开   (1) 约束的规则 从上往下 贪婪性   (2) 用 routes.MapRoute(...) 添加   ...

  7. 简单的VC++ ADO帮助类

    首先看头文件 #pragma once #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_name ...

  8. Spark-Mllib(一)数据类型

    一.本地向量 有如下几个类: Vector(基类),DenseVector,SparseVector,Vectors(工厂方法,推荐用) 工厂模式是:定义一个用于创建对象的接口,让子类决定实例化哪一个 ...

  9. 操作素有的ul的元素

    1 $(function() { var all = $(".test"); $(".test").each(function() { var y = $(th ...

  10. 使用多文档接口(Multiple Document Interface) 一

    原文地址msdn:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644909(v=vs.85).aspx#creating_fr ...