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後問題解決.