系統和資料庫LANG不一致的問題

charsi發表於2010-07-20

對於系統和資料庫字符集設定不一致的問題,可能會出現多種問題.
1.對資料imp/exp匯出匯入時,可能會有些字元出現報錯,典型的報錯如下(雖然對資料的影響應該不會造成影響):
EXP-00091:Exporting questionable statistics.
2.有些資料格式可能不能識別,遇到一個問題,如果系統shell設定的環境變數不是AL32UTF8,則有些資料格式的資料無法識別
主要是影響到date資料型別.

如果系統shell環境變數為中文,資料庫環境變數為字元型別,則會報錯
$ export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
$ sqlplus "/ as sysdba"

SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

SQL> insert into testxx values(to_date('13-Jan-10 17:00:52', 'DD-MM-YY HH24:MI:SS'));
insert into testxx values(to_date('13-Jan-10 17:00:52', 'DD-MM-YY HH24:MI:SS'))
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected

如果系統shell環境變數為中文,資料庫環境變數為中文,也會報錯
[oracle:/home/oracle#]env|grep LANG
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG=en_US.UTF-8

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

SQL> insert into testxx values(to_date('13-Jan-10 17:00:52', 'DD-MM-YY HH24:MI:SS'));
insert into testxx values(to_date('13-Jan-10 17:00:52', 'DD-MM-YY HH24:MI:SS'))
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected

而如果環境變數中的NLS_LANG設定為AL32UTF8型別的話,無論資料庫的LANGUAGE設定為AL32UTF8或ZHS16GBK,上述的sql均能正常執行.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1035419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章