NLS:‘National Language Support (NLS)’ 當我們設定一種nls的時候實際上我們是爲oracle在存放數據時指定了他的語種所特有的一些表達形式,比如我們選擇chinese,那麼它的中文字符如何存放,按什麼規則排序,貨幣如何表示,日期格式也就被設定了。
NLS_Language 指定:
- Oracle(錯誤)信息的語言
- 日和月份的名稱
注意:NLS_LANGUAGE與插入和查詢的*數據*的語言無關。
NLS_Territory 指定:
- 貨幣和數字格式
- 計算星期和天數的範圍和慣例
客戶端字符集(CLIENTS CHARACTERSET):
- 定義Oracle客戶端,客戶應用使用的編碼
* 或者它要符合您Microsoft Windows代碼頁 (GUI工具的ACP, 命令提示符的CHCP 值)
* 或者爲Unicode WIN32應用設置爲UTF8/AL32UTF8。
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
已連接。
SYSDATE
--------------
28-11月-14
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
版本 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>
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中舉的例子。
Oracle Database Client Globalization Support
Setting the NLS_LANG Environment Variable for Oracle Databases