天天看點

oracle 關于nls_language,NLS_CHARACTERSET,資料庫的字元級别

NLS_LANGUAGE指定伺服器消息的語言, 影響提示資訊是中文還是英文

NLS_TERRITORY指定伺服器的日期和數字格式

NLS_CHARACTERSET字元集

檢視這些參數

select userenv('language') from dual;

JAPANESE_JAPAN.JA16SJISTILDE

或者是

AMERICAN_AMERICA.JA16SJISTILDE

其中三部分分别是

NLS_LANGUAGE:JAPANESE

NLS_TERRITORY:JAPAN

NLS_CHARACTERSET:JA16SJISTILDE

也可以通過select * from v$nls_parameters;檢視.

如果兩個DB之間的以上參數不同,會導緻導資料時 發生表的COMMONTS等亂碼問題,或者是日期格式不同2016-04-04在JAPANESE可用,在AMERICAN下則是2016-APR-04,等問題.

如果兩個DB之間是用戶端與伺服器關系,則用戶端設定會覆寫伺服器端,如2016-04-04在用戶端JAPANESE可用,在伺服器端AMERICAN不可用.

修改字元級,

nls_language和NLS_TERRITORY通過SQL修改

ALTER SESSION SET nls_language='JAPANESE';

ALTER SESSION SET NLS_TERRITORY='JAPAN';

NLS_CHARACTERSET則是安裝資料庫時指定的不可修改.

設定順序:

1. ALTER SESSION文

2. NLS_LANG環境變量

3. NLS_LANGUAGE、NLS_TERRITORY初始化參數

4.預設值

---------------------------------

執行個體

batch伺服器,執行BATCH處理,調用BATCH服務上的JAVA的JAR包中的JAVA處理執行SQL删除DB伺服器上的表資料,條件是,一定日期以前的資料要删除.

報了日期格式不對的 異常, 這個SQL在本地測試是好用的,經确認後,本地語言環境是JAPANESE_JAPAN.JA16SJISTILDE,而DB伺服器環境是

伺服器上是AMERICAN.AMERICA.JA16SJISTILDE,将DB伺服器也設定成JAPANESE_JAPAN.JA16SJISTILDE,結果還是報錯.

BATCH伺服器沒有安裝ORACLE是通過JNDI連接配接DB,這時将BATCH伺服器也,用EXPORT NLS_LANG=JAPANESE,可以依舊沒有解決.

檢視BATCH服務起點的語言設定,ll /etc/sysconfig/i18n,将裡面的LANG=EN.UTF-8改成ja_JP.UTF-8後問題解決.