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。
 
 
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)

 

轉載請注明出處:http://blog.csdn.net/pan_tian/article/details/7745717

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM