Oracle 8i中字符集亂碼問題析及其解決辦法(轉)
一、問題描述
SQL Plus WorkSheet是一個視窗圖形介面的SQL語句編輯器,對於那些喜歡視窗介面而不喜歡字元介面的使用者,該工具相對SQL/PLUS受到了很大的歡迎。但從Oracle 8i以後,如果安裝Oracle 8i時選取的是別於英語的字符集,對於我們中國,通常會選取簡體中文字符集(ZHS16GBK),安裝成功後,執行SQL Plus WorkSheet程式,會出現所有的中文顯示以及查詢結果均為亂碼的情況。
二、問題分析
最初出現該問題,首先懷疑就是安裝時字符集設定有問題,也就是說沒有設定正確的簡體中文字符集。首先檢查資料庫字符集,在SQL/PLUS中,執行下面的SQL語句,檢查所連線資料庫的字符集:
SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------SIMPLIFIED CHINESE_CHINA.ZHS16GBK
查詢結果發現資料庫安裝時所選字符集為簡體中文ZHS16GBK,說明安裝時字符集設定完全正確。第二步開始懷疑是使用者客戶端字符集問題,檢查客戶端登錄檔,開啟登錄檔編輯程式(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,發現Oracle客戶端字符集為AMERICAN_AMERICA.ZHS16GBK,設定也完全正確,可以排除是客戶端字符集設定錯誤的問題。同時還有一個現象就是在同一個客戶端機器上SQL/PLUS中的查詢字符集顯示完全正常,這也說明不是字符集設定問題,而是系統程式SQL/Plus Worksheet的問題。
在Oracle 8i以前的版本中,從來沒有出現過這樣的情況,這應該和Oracle版本有關,我們知道Oracle 8i和它前面的版本一個顯著的區別就是大部分的Oracle系統程式,現在均採用Java驅動,其實這也就是產生字符集亂碼問題的根本所在。非Java驅動的程式,如SQL*Plus,有一個系統引數NLS_LANG,該引數在UNIX系統中設定在環境變數中,在Windows作業系統中設定在登錄檔中,這個引數決定了客戶端應用程式的字符集。而對於基於Java應用的程式,如現在遇到的SQL*PLus Worksheet,NLS_LANG引數對這類程式是不起任何作用的。
三、解決方案
找到了問題產生的原因後,下面來討論如何解決該問題。對於Oracle Enterprise Manager中的所有工具,有一個配置檔名為dbappscfg.properties,修改該檔案即可解決上述問題。這個檔案的位置在$ORACLE_HOMEsysmanconfig目錄下,用任何的文字編輯器開啟該檔案,在這個檔案裡面,找到這樣一項,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
去掉註釋符#,同時將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對於Windows作業系統,還需要修改一項,在檔案中找到# SQLPLUS_SYSTEMROOT=c:WINNT40,去掉註釋符,將其修改為你所在機器的作業系統主目錄。如作業系統的主目錄在D盤的Winnt下,則將其修改為 SQLPLUS_SYSTEMROOT=d:WINNT。
對於後面一項的修改只對Windows作業系統進行,對UNIX作業系統則不需要。如果在Windows作業系統中不修改該項,在Oracle Enterprise Manager中,連線系統時,會提示如下的錯誤:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
修改完成後,儲存檔案,退出編輯。重新連線SQL PLUS Worksheet,字符集亂碼問題得到解決,顯示正確的簡體中文字符集。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-954144/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flashfxp 亂碼,2種辦法解決flashfxp 亂碼問題
- 常見php與mysql中文亂碼問題解決辦法PHPMySql
- webView的使用及其亂碼問題的解決方案WebView
- oracle字元亂碼問題的解決Oracle字元
- Servlet接收JSP引數亂碼問題解決辦法薦ServletJS
- 關於Oracle 9i字符集問題的解決辦法FCOracle
- libreoffice轉換檔案為pdf檔案亂碼問題解決辦法
- java中亂碼問題解決方法Java
- 解決plsql中中文亂碼問題SQL
- 【Salesforce問題解決】Dataloader匯出的檔案亂碼或者問號的解決辦法Salesforce
- Springmvc中文亂碼解決辦法SpringMVC
- centos 中文亂碼解決辦法2CentOS
- java中解決request中文亂碼問題Java
- 解決CentOS 中顯示亂碼問題CentOS
- oracle壞塊問題及解決辦法Oracle
- 解決Oracle11g中的索引名字亂碼問題Oracle索引
- MySQL匯入資料亂碼、出錯等問題的解決辦法MySql
- oracle 輸出中文亂碼問題解決方案Oracle
- 解決SSH亂碼問題
- 解決中文亂碼問題
- tomcat8.5+ windows中html頁面及控制檯中文亂碼問題解決辦法TomcatWindowsHTML
- [oracle]解決centos 7下oracle的中文亂碼問題OracleCentOS
- datastage抽取工程中文亂碼解決辦法AST
- ubuntu中文顯示亂碼解決辦法Ubuntu
- oracle rac asm 問題的官方解決辦法OracleASM
- Python專案,VS Code控制檯輸出亂碼問題解決辦法Python
- cocos2d-x解決中文亂碼問題的幾種辦法
- oracle 10g em 亂碼問題解決方法Oracle 10g
- oracle imp字符集問題的解決Oracle
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- Java 解決中文亂碼問題Java
- RDSSQLSERVER解決中文亂碼問題SQLServer
- 解決MySQL中文亂碼問題MySql
- MYSQL亂碼問題解決方法MySql
- 字元顯示亂碼問題處理辦法字元
- 生產oracle字符集轉碼問題Oracle
- SYBASE程式設計中的莫名錯誤及其解決辦法 (轉)程式設計