我在安裝數(shù)據(jù)庫的時候已經(jīng)選擇了UTF8作為數(shù)據(jù)庫字符集,但是在sqlplus和Oracle SQL Developer中插入數(shù)據(jù)后還是出現(xiàn)亂碼情況,。后來發(fā)現(xiàn)亂碼是客戶端造成的,。
ORACLE有兩方面的字符集,一是oracel server端的字符集,,二是oracle client端的字符集,。只有保證兩個字符集一致,并且所選的字符集要能支持中文,,才能不出亂碼,。 1.查看Oracel服務器端的字符集: select userenv('language') from dual; 我的結果是: USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.AL32UTF8 2.查看Oracle客戶端的字符集: $ echo $NLS_LANG 我出現(xiàn)亂碼時顯示的結果為空。 后來編輯.bashrc文件,,導入NLS_LANG環(huán)境變量,,將其設置為AMERICAN_AMERICA.AL32UTF8后,注銷用戶再登錄,,讓環(huán)境變量生效后,,在用sqlplus時,亂碼問題就搞定了,。 在linux下若安裝oracle沒有選擇ZHS16GBK,,則在處理漢字時會有亂碼情況出現(xiàn),。解決方法: 命令行模式下執(zhí)行sqlplus "/as sysdba",以sysdba身份進入sqlplus,先執(zhí)行sql語句:select * from sys.props$,,查看NLS_CHARACTER的值,,若不是"ZHS16GBK",則可運行sql語句:update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET' 執(zhí)行完畢后,,停止數(shù)據(jù)庫(sqlplus中使用sysdba登陸,,執(zhí)行shutdown命令),然后啟動數(shù)據(jù)庫,,啟動實例(startup),插入漢字成功,。 經(jīng)測試,該種方式由于修改了字符集的系統(tǒng)設置,,畢竟是不妥當?shù)?我們后來發(fā)現(xiàn)備份表空間失敗問題,,疑似由此引起),最好的辦法還是重新創(chuàng)建數(shù)據(jù)庫,,創(chuàng)建時選擇字符集為“ZHS16GBK” |
|