Oracle 8i字符集亂碼問(wèn)題析及其解決辦法
更新時(shí)間:2007年03月07日 00:00:00 作者:
正在看的ORACLE教程是:Oracle 8i字符集亂碼問(wèn)題析及其解決辦法。一、問(wèn)題描述
SQL Plus WorkSheet是一個(gè)窗口圖形界面的SQL語(yǔ)句編輯器,對(duì)于那些喜歡窗口界面而不喜歡字符界面的用戶(hù),該工具相對(duì)SQL/PLUS受到了很大的歡迎。但從Oracle 8i以后,如果安裝Oracle 8i時(shí)選取的是別于英語(yǔ)的字符集,對(duì)于我們中國(guó),通常會(huì)選取簡(jiǎn)體中文字符集(ZHS16GBK),安裝成功后,運(yùn)行SQL Plus WorkSheet程序,會(huì)出現(xiàn)所有的中文顯示以及查詢(xún)結(jié)果均為亂碼的情況。
二、問(wèn)題分析
最初出現(xiàn)該問(wèn)題,首先懷疑就是安裝時(shí)字符集設(shè)置有問(wèn)題,也就是說(shuō)沒(méi)有設(shè)置正確的簡(jiǎn)體中文字符集。首先檢查數(shù)據(jù)庫(kù)字符集,在SQL/PLUS中,運(yùn)行下面的SQL語(yǔ)句,檢查所連接數(shù)據(jù)庫(kù)的字符集:
查詢(xún)結(jié)果發(fā)現(xiàn)數(shù)據(jù)庫(kù)安裝時(shí)所選字符集為簡(jiǎn)體中文ZHS16GBK,說(shuō)明安裝時(shí)字符集設(shè)置完全正確。第二步開(kāi)始懷疑是用戶(hù)客戶(hù)端字符集問(wèn)題,檢查客戶(hù)端注冊(cè)表,打開(kāi)注冊(cè)表編輯程序(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,發(fā)現(xiàn)Oracle客戶(hù)端字符集為AMERICAN_AMERICA.ZHS16GBK,設(shè)置也完全正確,可以排除是客戶(hù)端字符集設(shè)置錯(cuò)誤的問(wèn)題。同時(shí)還有一個(gè)現(xiàn)象就是在同一個(gè)客戶(hù)端機(jī)器上SQL/PLUS中的查詢(xún)字符集顯示完全正常,這也說(shuō)明不是字符集設(shè)置問(wèn)題,而是系統(tǒng)程序SQL/Plus Worksheet的問(wèn)題。
在Oracle 8i以前的版本中,從來(lái)沒(méi)有出現(xiàn)過(guò)這樣的情況,這應(yīng)該和Oracle版本有關(guān),我們知道Oracle 8i和它前面的版本一個(gè)顯著的區(qū)別就是大部分的Oracle系統(tǒng)程序,現(xiàn)在均采用Java驅(qū)動(dòng),其實(shí)這也就是產(chǎn)生字符集亂碼問(wèn)題的根本所在。非Java驅(qū)動(dòng)的程序,如SQL*Plus,有一個(gè)系統(tǒng)參數(shù)NLS_LANG,該參數(shù)在UNIX系統(tǒng)中設(shè)置在環(huán)境變量中,在Windows操作系統(tǒng)中設(shè)置在注冊(cè)表中,這個(gè)參數(shù)決定了客戶(hù)端應(yīng)用程序的字符集。而對(duì)于基于Java應(yīng)用的程序,如現(xiàn)在遇到的SQL*PLus Worksheet,NLS_LANG參數(shù)對(duì)這類(lèi)程序是不起任何作用的。
三、解決方案
找到了問(wèn)題產(chǎn)生的原因后,下面來(lái)討論如何解決該問(wèn)題。對(duì)于Oracle Enterprise Manager中的所有工具,有一個(gè)配置文件名為dbappscfg.properties,修改該文件即可解決上述問(wèn)題。這個(gè)文件的位置在$ORACLE_HOME\sysman\config目錄下,用任何的文本編輯器打開(kāi)該文件,在這個(gè)文件里面,找到這樣一項(xiàng),
去掉注釋符#,同時(shí)將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對(duì)于Windows操作系統(tǒng),還需要修改一項(xiàng),在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機(jī)器的操作系統(tǒng)主目錄。如操作系統(tǒng)的主目錄在D盤(pán)的Winnt下,則將其修改為 SQLPLUS_SYSTEMROOT=d:\\WINNT。
對(duì)于后面一項(xiàng)的修改只對(duì)Windows操作系統(tǒng)進(jìn)行,對(duì)UNIX操作系統(tǒng)則不需要。如果在Windows操作系統(tǒng)中不修改該項(xiàng),在Oracle Enterprise Manager中,連接系統(tǒng)時(shí),會(huì)提示如下的錯(cuò)誤:
或者
修改完成后,保存文件,退出編輯。重新連接SQL PLUS Worksheet,字符集亂碼問(wèn)題得到解決,顯示正確的簡(jiǎn)體中文字符集。
SQL Plus WorkSheet是一個(gè)窗口圖形界面的SQL語(yǔ)句編輯器,對(duì)于那些喜歡窗口界面而不喜歡字符界面的用戶(hù),該工具相對(duì)SQL/PLUS受到了很大的歡迎。但從Oracle 8i以后,如果安裝Oracle 8i時(shí)選取的是別于英語(yǔ)的字符集,對(duì)于我們中國(guó),通常會(huì)選取簡(jiǎn)體中文字符集(ZHS16GBK),安裝成功后,運(yùn)行SQL Plus WorkSheet程序,會(huì)出現(xiàn)所有的中文顯示以及查詢(xún)結(jié)果均為亂碼的情況。
二、問(wèn)題分析
最初出現(xiàn)該問(wèn)題,首先懷疑就是安裝時(shí)字符集設(shè)置有問(wèn)題,也就是說(shuō)沒(méi)有設(shè)置正確的簡(jiǎn)體中文字符集。首先檢查數(shù)據(jù)庫(kù)字符集,在SQL/PLUS中,運(yùn)行下面的SQL語(yǔ)句,檢查所連接數(shù)據(jù)庫(kù)的字符集:
查詢(xún)結(jié)果發(fā)現(xiàn)數(shù)據(jù)庫(kù)安裝時(shí)所選字符集為簡(jiǎn)體中文ZHS16GBK,說(shuō)明安裝時(shí)字符集設(shè)置完全正確。第二步開(kāi)始懷疑是用戶(hù)客戶(hù)端字符集問(wèn)題,檢查客戶(hù)端注冊(cè)表,打開(kāi)注冊(cè)表編輯程序(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,發(fā)現(xiàn)Oracle客戶(hù)端字符集為AMERICAN_AMERICA.ZHS16GBK,設(shè)置也完全正確,可以排除是客戶(hù)端字符集設(shè)置錯(cuò)誤的問(wèn)題。同時(shí)還有一個(gè)現(xiàn)象就是在同一個(gè)客戶(hù)端機(jī)器上SQL/PLUS中的查詢(xún)字符集顯示完全正常,這也說(shuō)明不是字符集設(shè)置問(wèn)題,而是系統(tǒng)程序SQL/Plus Worksheet的問(wèn)題。
在Oracle 8i以前的版本中,從來(lái)沒(méi)有出現(xiàn)過(guò)這樣的情況,這應(yīng)該和Oracle版本有關(guān),我們知道Oracle 8i和它前面的版本一個(gè)顯著的區(qū)別就是大部分的Oracle系統(tǒng)程序,現(xiàn)在均采用Java驅(qū)動(dòng),其實(shí)這也就是產(chǎn)生字符集亂碼問(wèn)題的根本所在。非Java驅(qū)動(dòng)的程序,如SQL*Plus,有一個(gè)系統(tǒng)參數(shù)NLS_LANG,該參數(shù)在UNIX系統(tǒng)中設(shè)置在環(huán)境變量中,在Windows操作系統(tǒng)中設(shè)置在注冊(cè)表中,這個(gè)參數(shù)決定了客戶(hù)端應(yīng)用程序的字符集。而對(duì)于基于Java應(yīng)用的程序,如現(xiàn)在遇到的SQL*PLus Worksheet,NLS_LANG參數(shù)對(duì)這類(lèi)程序是不起任何作用的。
三、解決方案
找到了問(wèn)題產(chǎn)生的原因后,下面來(lái)討論如何解決該問(wèn)題。對(duì)于Oracle Enterprise Manager中的所有工具,有一個(gè)配置文件名為dbappscfg.properties,修改該文件即可解決上述問(wèn)題。這個(gè)文件的位置在$ORACLE_HOME\sysman\config目錄下,用任何的文本編輯器打開(kāi)該文件,在這個(gè)文件里面,找到這樣一項(xiàng),
去掉注釋符#,同時(shí)將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對(duì)于Windows操作系統(tǒng),還需要修改一項(xiàng),在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機(jī)器的操作系統(tǒng)主目錄。如操作系統(tǒng)的主目錄在D盤(pán)的Winnt下,則將其修改為 SQLPLUS_SYSTEMROOT=d:\\WINNT。
對(duì)于后面一項(xiàng)的修改只對(duì)Windows操作系統(tǒng)進(jìn)行,對(duì)UNIX操作系統(tǒng)則不需要。如果在Windows操作系統(tǒng)中不修改該項(xiàng),在Oracle Enterprise Manager中,連接系統(tǒng)時(shí),會(huì)提示如下的錯(cuò)誤:
或者
修改完成后,保存文件,退出編輯。重新連接SQL PLUS Worksheet,字符集亂碼問(wèn)題得到解決,顯示正確的簡(jiǎn)體中文字符集。
您可能感興趣的文章:
- 使用工具 plsqldev將Excel導(dǎo)入Oracle數(shù)據(jù)庫(kù)
- oracle(plsql)生成流水號(hào)
- plsql連接oracle數(shù)據(jù)庫(kù)報(bào)ora 12154錯(cuò)誤解決方法
- oracle客戶(hù)端PLSQL連接失敗解決方法
- oracle中文亂碼的解決方法
- oracle中文亂碼解決的辦法
- oracle em 按鈕亂碼解決辦法及em網(wǎng)頁(yè)變成英文
- oracle安裝出現(xiàn)亂碼等相關(guān)問(wèn)題
- Oracle客戶(hù)端與plsql查詢(xún)數(shù)據(jù)亂碼修改成中文的快速解決方法
相關(guān)文章
Oracle數(shù)據(jù)倉(cāng)庫(kù)的分層管理器解決方案開(kāi)發(fā)者網(wǎng)絡(luò)Oracle
Oracle數(shù)據(jù)倉(cāng)庫(kù)的分層管理器解決方案開(kāi)發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03
Oracle數(shù)據(jù)庫(kù)中文顯示???????解決辦法
這兩天剛剛使用Oracle,出現(xiàn)了好多不愉快的事情,下面分享一下我的一點(diǎn)經(jīng)歷,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中文顯示???????的解決辦法,需要的朋友可以參考下2024-04-04
oracle中使用group by優(yōu)化distinct
這篇文章主要介紹了oracle中使用group by優(yōu)化distinct的相關(guān)資料,需要的朋友可以參考下2015-11-11
Oracle查詢(xún)中OVER (PARTITION BY ..)用法
這篇文章主要介紹了Oracle查詢(xún)中OVER (PARTITION BY ..)用法,內(nèi)容和代碼大家參考一下。2017-11-11
CentOS7下Oracle19c rpm安裝過(guò)程
這篇文章主要介紹了CentOS7下Oracle19c rpm安裝過(guò)程,包含環(huán)境配置、依賴(lài)安裝問(wèn)題,對(duì)Oracle19c rpm安裝相關(guān)知識(shí)感興趣的朋友一起看看吧2021-07-07
Oracle數(shù)據(jù)庫(kù)中的觸發(fā)器詳解
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中觸發(fā)器的相關(guān)資料,觸發(fā)器也是保護(hù)數(shù)據(jù)完整性的一種重要方法,于存儲(chǔ)過(guò)程不同的是,觸發(fā)器是通過(guò)事件進(jìn)行觸發(fā)被執(zhí)行,存儲(chǔ)過(guò)程需要被調(diào)用執(zhí)行,需要的朋友可以參考下2024-02-02
解決Oracle數(shù)據(jù)庫(kù)歸檔日志占滿磁盤(pán)空間問(wèn)題
這篇文章主要介紹了解決Oracle數(shù)據(jù)庫(kù)歸檔日志占滿磁盤(pán)空間問(wèn)題,文中給大家提到了常用命令及實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-08-08
oracle數(shù)據(jù)庫(kù)id自增及生成uuid問(wèn)題
這篇文章主要介紹了oracle數(shù)據(jù)庫(kù)id自增及生成uuid問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

