设置 UNIX环境下的NLS_LANG


如何设置 NLS_LANG 变量 

 
1) 正确配置 LC_ALL 参数 
2) 配置 telnet/ssh/SecureCRT 客户端的字符集


linux中可以用locale命令来查看 NLS_LANG设置,如下例所示

[root@HXZG ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


大多数unix版本都是以下默认设置“C”,

[oracle@HXZG ~]$ locale

LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=

“C” 代表着 NLS_LANG为 US7ASCII,这就意味着你的终端只能显示a-z, A-Z and 0-9这些字符


 Unix环境可以通过export LC_ALL 指定一个值来设置语言环境变量
 
[oracle@HXZG ~]$ export LC_ALL=en_US.UTF-8

[oracle@HXZG ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

[oracle@HXZG ~]$ export LC_ALL=zh_CN.gb2312

[oracle@HXZG ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.gb2312"
LC_NUMERIC="zh_CN.gb2312"
LC_TIME="zh_CN.gb2312"
LC_COLLATE="zh_CN.gb2312"
LC_MONETARY="zh_CN.gb2312"
LC_MESSAGES="zh_CN.gb2312"
LC_PAPER="zh_CN.gb2312"
LC_NAME="zh_CN.gb2312"
LC_ADDRESS="zh_CN.gb2312"
LC_TELEPHONE="zh_CN.gb2312"
LC_MEASUREMENT="zh_CN.gb2312"
LC_IDENTIFICATION="zh_CN.gb2312"
LC_ALL=zh_CN.gb2312


NLS_LANG 由三部分组成 : NLS_LANG=<NLS_LANGUAGE>_<NLS_TERRITORY>.<clients characterset>

                      :NLS_LANG=语言_地域_客户端字符集


 LANG值为"en_US.UTF-8" 时,意味着NLS_LANG用以下格式设置 NLS_LANG=AMERICAN_AMERICA.AL32UTF8 
 
如果LANG值为 "fr_FR.UTF-8" 那在 NLS_LANG设置的值就是 FRENCH_FRANCE.AL32UTF8.


也可以通过export设置LANG

[oracle@HXZG ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

[oracle@HXZG ~]$ locale | grep LANG
LANG=en_US.UTF-8