LINUX+ORACLE 字符集 语言 相关区别:LANG NLS_LANG NLS_LANGUAGE characterset

NLS_打头的都是ORACLE家的!!!!

 

操作系统环境变量LANG和NLS_LANG的关系

操作系统环境变量针对语言项设置有几个,我经常设置的是这两个LANG和NLS_LANG。

LANG是针对Linux系统的语言、地区、字符集的设置,对linux下的应用程序有效,如date;

NLS_LANG是针对Oracle语言、地区、字符集的设置,对oracle中的工具有效。

characterset字符集就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。 格式为<语言><比特位数><编码 >比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集
数据库初始化参数字符集,在建数据库前指定的字符集,建立后通常不能修改,如果修改可以用命令alter database set character set  xxx; 不过这样修改有一定的危险,有可能会出现乱码超成数据的丢失,而且修改后的字符集一定是修改前的超集。如果未指定建库时会依赖os的设置。session级作用域只是影响那个连接
 
 
NLS_LANG是环境变量,包括3部分NLS参数:NLS_LANGUAGE, NLS_TERRITORY, NLS_CHARACTERSET,需要在启动SQLPLUS等工具之前设置;
NLS_LANGUAGE主要控制SESSION中提示消息的语言,可以使用ALTER SESSION在SQLPLUS里面设置;
NLS_TERRITORY主要控制SESSION中的日期和货币等本地化参数的现实格式,也可以像NLS_LANGUAGE一样在 SESSION 里面设置;
NLS_CHARACTERSET控制客户端的字符集,不能在SESSION里面进行设置,只能通过NLS_LANG环境变量的方式进行设置。

 

 

LANG与NLS_LANG


例如

 

Shell script代码    收藏代码
  1. export LANG=zh_CN.GB2312  
  2. export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  

 

 

 

 

Trc代码    收藏代码
  1. $export LANG=zh_CN.GB2312  
  2. $date  
  3. 2012年 11月 27日 星期二 16:20:35 CST  

 

显示是中文界面。

 

 

Trc代码    收藏代码
  1. $export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  
  2.   
  3. $sqlplus / as sysdba  
  4. SQL*Plus: Release 10.2.0.4.0 - Production on Tue Nov 27 16:19:03 2012  
  5. Copyright (c) 19822007, Oracle.  All Rights Reserved.  
  6. Connected to:  
  7. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production  
  8. With the Partitioning, Real Application Clusters, OLAP, Data Mining  
  9. and Real Application Testing options  
  10. SQL> select sysdate from dual;  
  11.   
  12. SYSDATE  
  13. ------------  
  14. 27-NOV-12  

 

显示的是英文环境,但只对ORACLE程序生效。



Linux系统中关于环境变量的LANG设置主要有下列项目:

 

Trc代码    收藏代码
  1. [root@blliu tmp]# locale  
  2. LANG=zh_CN.gb2312  
  3. LC_CTYPE="zh_CN.gb2312"  
  4. LC_NUMERIC="zh_CN.gb2312"  
  5. LC_TIME="zh_CN.gb2312"  
  6. LC_COLLATE="zh_CN.gb2312"  
  7. LC_MONETARY="zh_CN.gb2312"  
  8. LC_MESSAGES="zh_CN.gb2312"  
  9. LC_PAPER="zh_CN.gb2312"  
  10. LC_NAME="zh_CN.gb2312"  
  11. LC_ADDRESS="zh_CN.gb2312"  
  12. LC_TELEPHONE="zh_CN.gb2312"  
  13. LC_MEASUREMENT="zh_CN.gb2312"  
  14. LC_IDENTIFICATION="zh_CN.gb2312"  
  15. LC_ALL=  

 

这里LC_ALL没有设置,如果它设置了,上面所有的设置都无效的,系统会读取LC_ALL。

 

locale -a 查看本地字符集
locale -m 查看所有支持的字符集


在Oracle数据库中查NLS_LANG设置:

 

 

Sql代码    收藏代码
  1. SQL> SELECT *  
  2.   2    FROM DATABASE_PROPERTIES  
  3.   3   WHERE PROPERTY_NAME IN  
  4.   4         ('NLS_LANGUAGE''NLS_TERRITORY''NLS_CHARACTERSET');  
  5.   
  6. PROPERTY_NAME                  PROPERTY_VALUE                 DESCRIPTION  
  7. ------------------------------ ------------------------------ --------------------  
  8. NLS_LANGUAGE                   AMERICAN                       Language  
  9. NLS_TERRITORY                  AMERICA                        Territory  

 

查看会话NLS_LANG

select * from nls_session_parameters;

 

 

exp时先确确认 服务器NLS_LANG设置客户端NLS_LANG 一样,再导出表,以免发生字符集转换数据乱码损坏.

例子:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

SQL> !    
[oracle@node1 ~]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
[oracle@node1 ~]$ echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
[oracle@node1 ~]$ exp scott/tiger file='/u02/exp_imp/tb_pt_sal_other' log='/u02/exp_imp/tb_pt_sal_other.log' tables=tb_pt:sal_other

 

 

 

2. 设置 NLS_*******方法:
2.1 环境变量设置(windows),下划线必须和territory配对,点必须和字符集配对
set nls_lang=american_america.utf8
set nls_lang=american / set nls_lang=american_ / set nls_lang=american_.
set nls_lang=_america
set nls_lang=.utf8

2.2 SESSION设置
alter session set nls_language='american' nls_territory='america';
alter session set nls_language='american';
alter session set nls_territory='america';


 

 

Oracle数据库NLS_LANG设置


 1. NLS_LANG 参数组成

  NLS_LANG参数由以下部分组成:

  NLS_LANG=_.

  NLS_LANG各部分含义如下:

  LANGUAGE指定:

  -Oracle消息使用的语言

  -日期中月份和日显示

  TERRITORY指定

  -货币和数字格式

  -地区和计算星期及日期的习惯

  CHARACTERSET:

  -控制客户端应用程序使用的字符集

  通常设置或者等于客户端(如Windows)代码页

  或者对于unicode应用设置为UTF8

  查看当前oracle使用的CHARACHERSET:

  select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

  查看instance字符集Language与Territory:

  select * from nls_instance_parameters;

  NLS_LANGUAGE

  NLS_TERRITORY

  这两项

  2、操作系统查看NLS_LANG设置:

  env| grep NLS_LANG

 

 

 

 

 

 

你可能感兴趣的:(nls_language,NLS_LAN)