sqlplus中文顯示亂碼的問題

2021-06-20 07:33:05 字數 4331 閱讀 3444

在windows下sqlplus完全正常,可是到linux下,sqlplus中文顯示就出問題了,總是顯示「??」或是其他亂碼,這個問題又怎麼解決呢?

經過在網路上查資料,以及嘗試,得到的解法如下:

其實很簡單我們只要設定退出sqlplus,設定相應的環境變數nls_lang 

export nls_lang="simplified chinese_china.zhs16gbk" 

為了下次不必重新設定,我們可以將其放在/home/oracle/.bash_profile或/etc/profile中。重新進入sqlplus,但是發現原來在sqlplus中插入的資料中文還是顯示"??",不過你重新插入一條看看,是不是可以正常顯示中文了。 

另外,還找到了其它的資料,隨便的帖在下面,以備使用:

在國內外大中型資料庫管理系統中,把oracle作為資料庫管理平台的使用者比較多。oracle   不論是資料庫管理能力還是安全性都是無可非議的,但是,它在漢字資訊的顯示方面著實給中國使用者帶來不少麻煩,筆者多年從事oracle資料庫管理,經常收到周圍使用者和外地使用者反映有關oracle資料庫漢字顯示問題的求援信,主要現象是把漢字顯示為不可識別的亂碼,造成原來大量資訊無法使用。本文將就這一問題產生的原因和解決辦法進行一些**,供存在這方面問題的使用者朋友參考。     

----   1、原因分析     

----   通過對使用者反映情況的分析,發現字符集的設定不當是影響oracle資料庫漢字顯示的關鍵問題。那麼字符集是怎麼一會事呢?字符集是oracle   為適應不同語言文字顯示而設定的。用於漢字顯示的字符集主要有zhs16cgb231280,us7ascii,we8iso8859p1等。字符集不僅需在伺服器端存在,而且客戶端也必須有字符集註冊。伺服器端,字符集是在安裝oracle時指定的,字符集登記資訊儲存在oracle資料庫字典的v$nls_parameters表中;客戶端,字符集分兩種情況,一種情況是sql*net   2.0以下版本,字符集是在windows的系統目錄下的oracle.ini檔案中登記的;另一種情況是sql*net   2.0以上(即32位)版本,字符集是在windows的系統登錄檔中登記的。要在客戶端正確顯示oracle   資料庫漢字資訊,首先必須使伺服器端的字符集與客戶端的字符集一致;其次是載入到oracle資料庫的資料字符集必須與伺服器指定字符集一致。因此,把使用者存在的問題歸納分類,產生漢字顯示異常的原因大致有以下幾種:     

----   1.   1伺服器指定字符集與客戶字符集不同,而與載入資料字符集一致。     

----   這種情況是最常見的,只要把客戶端的字符集設定正確即可,解決辦法見2.1。     

----   1.   2伺服器指定字符集與客戶字符集相同,與載入資料字符集不一致。     

----   這類問題一般發生在oracle版本公升級或重新安裝系統時選擇了與原來伺服器端不同的字符集,而恢復載入的備份資料仍是按原字符集卸出的場合,以及載入從其它使用不同字符集的oracle資料庫卸出的資料的情況。這兩種情況中,不管伺服器端和客戶端字符集是否一致都無法顯示漢字。解決辦法見2.2。     

----   1.3伺服器指定字符集與客戶字符集不同,與輸入資料字符集不一致。     

----   這種情況是在客戶端與伺服器端字符集不一致時,從客戶端輸入了漢字資訊。輸入的這些資訊即便是把客戶端字符集更改正確,也無法顯示漢字。解決辦法見2.3。     

----   2.解決辦法     

----   下面將分別對上述三種情況給出解決辦法。為了敘述方便,假設客戶端使用windows95/98環境,並已成功地配置了tcp/ip協議,安裝了oracle的sql*net,sql*pluse產品。     

----   2.1   設定客戶端字符集與伺服器端字符集一致     

----   假設當前伺服器端使用us7ascii字符集。     

----   (1)檢視伺服器端字符集     

----   通過客戶端或伺服器端的sql*plus登入oracle的乙個合法使用者,執行下列sql語句:     

sql   >   select   *   from   v$nls_parameters     

parameter            value   

nls_language            american   

nls_territory         america   

….                 ….   

nls_characterset          us7ascii   

nls_sort              binary   

nls_nchar_characterset       us7ascii   

----   從上述列表資訊中可看出伺服器端oracle資料庫的字符集為´us7ascii´。     

----   (2)按照伺服器端字符集對客戶端進行配置     

----   配置方法有兩種:     

安裝oracle的客戶端軟體時指定   

----   在安裝oracle的客戶端產品軟體時,選擇與oracle服務端一致的字符集(本例為us7ascii)即可。     

修改註冊資訊的方法   

----   根據oracle   客戶端所選sql*net   的版本分為下列兩種情況:     

----   a.   客戶端為   sql*net   2.0   以下版本     

----   進入windows的系統目錄,編輯oracle.ini檔案,用us7ascii替換原字符集,重新啟動計算機,設定生效。     

----   b.   客戶端為   sql*net   2.0   以上版本     

----   在win98   下   運   行regedit,第一步選hkey_local_machine,第二步選擇software,   第三步選擇   oracle,   第四步選擇   nls_lang,   鍵   入   與服   務   器   端   相   同   的   字   符   集(本例為:american_american.us7ascii)。     

----   2.2   強制載入資料字符集與伺服器端字符集一致     

----   假設要載入資料從原oracle資料庫卸出時的字符集為us7ascii,當前oracle伺服器字符集為we8iso8859p1。     

----   下面提供三種解決方法:     

----   (1)   伺服器端重新安裝oracle     

----   在重新安裝oracle   時選擇與原卸出資料一致的字符集(本例為us7ascii)。     

----   載入原卸出的資料。     

----   這種情況僅僅使用於空庫和具有同一種字符集的資料。     

----   (2)強行修改伺服器端oracle當前字符集     

----   在用imp命令載入資料前,先在客戶端用sql*plus登入system   dba使用者,執行下列sql語句進行當前oracle資料庫字符集修改:     

sql   >   create   database character   set   us7ascii   

*   create   database   character   set   us7ascii   

error   at   line   1:   

ora-01031:   insufficient   privileges   

----   你會發現語句執行過程中,出現上述錯誤提示資訊,此時不用理會,實際上oracle資料庫的字符集已被強行修改為us7ascii,接著用imp命令裝載資料。等資料裝載完成以後,shutdown   資料庫,再startup   資料庫,用合法使用者登入oracle資料庫,在sql>命令提示符下,執行select   *   from   v$nls_parameters,可以看到oracle資料庫字符集已復原,這時再檢視有漢字字元資料的表時,漢字已能被正確顯示。     

----   (3)利用資料格式轉儲,避開字符集限制     

----   這種方法主要用於載入外來oracle資料庫的不同字符集資料。其方法如下:     

----   先將資料載入到具有相同字符集的伺服器上,然後用轉換工具卸出為foxbase   格式或access格式資料庫,再用轉換工具轉入到不同字符集的oracle資料庫中,這樣就避免了oracle字符集的困擾。目前資料庫格式轉換的工具很多,象power   builder5.0以上版本提供的pipeline,microsoft   access資料庫提供的資料匯入/匯出功能等。轉換方法參見有關資料說明。.     

----   2.3匹配字符集替換漢字     

----   對於1.3提到的情況,沒有很好的辦法,只能先把客戶端與伺服器端字符集匹配一致後,根據原輸入漢字的特徵碼替換漢字字元部分。

解決Linux下sqlplus中文亂碼問題

錯誤現象 在windows下用其他工具訪問oracle,確認中文正常顯示。在linux下使用sqlplus查詢資料表中文內容出現亂碼。分析及解決 因為windows下正常,所以問題應出現在linux客戶端。用下列sql查詢資料庫字符集為 zhs16gbk select from nls databa...

webView loadData 中文亂碼問題

使用 loaddata方法是中文部分會出現亂碼,即使指定 utf 8 gbk gb2312 也一樣。webview.getsettings setdefaulttextencodingname utf 8 設定預設為utf 8 text html utf 8 api提供的標準用法,無法解決亂碼問題 ...

mysql jsp servlet 中文亂碼問題。

google一下。你可以找一大堆解決方案。但是我覺得都沒有從根本上解決問題。是不是?我覺得要想根本解決。最主要的方法是統一編碼方案。說出來很簡單。原因也很簡單。但你真的做到了嗎。首先不論你寫的是jsp servlet html 等都必須顯示標明contenttype為utf 8 強烈推薦是utf 8...