Oracle:sqlplus查詢出的中文是亂碼問題的解決(轉)

Claire_ljy發表於2020-04-04

有一臺遠端伺服器不能通過Oracle客戶端遠端登陸,只能通過Secure CRT的ssh登陸(估計原因是1521埠被封)。在這種情況下要select資料

就只能先ssh到遠端伺服器,然後執行sqlplus了。

登陸進sqlplus以後,執行select語句,英文都是正常的,但中文全都是????。

問題解決:

首先,確定問題的原因所在:是字符集的問題是肯定的了,但問題是那裡的字符集設定有錯誤。

在sh下# locale
LANG=zh_CN.GB18030
LC_CTYPE="zh_CN.GB18030"
LC_NUMERIC="zh_CN.GB18030"
LC_TIME="zh_CN.GB18030"
LC_COLLATE="zh_CN.GB18030"
LC_MONETARY="zh_CN.GB18030"
LC_MESSAGES="zh_CN.GB18030"
LC_PAPER="zh_CN.GB18030"
LC_NAME="zh_CN.GB18030"
LC_ADDRESS="zh_CN.GB18030"
LC_TELEPHONE="zh_CN.GB18030"
LC_MEASUREMENT="zh_CN.GB18030"
LC_IDENTIFICATION="zh_CN.GB18030"
LC_ALL=

這些值都是可以正確顯示中文的。應該不是作業系統字符集的問題。

那麼肯定就是Oracle字符集設定的問題了。於是就聯想到匯出資料庫時:EXP-00091錯誤也是由於字符集環境設定的問題。

sh下執行$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

再進入sqlplus查詢,中文果然顯示正常了。

至此,問題順利解決。

使用sqlplus的一些竅門:

★ 由於sqlplus對行寬的設定比較小,所以查出來的記錄的列名和值自動折行,都擠在一個非常小的寬度內,非常難看。

SQL> set linesize 32767

這樣就把行寬設定為最大。在sqlplus的範圍內一般不會自動折行了。

但由於Secuer CRT 也有行寬的設定,所以還是會堆在一起。這個問題比較簡單。

設定Secuer CRT 行寬,或把結果貼上Editplus中,就一行是一行的顯示了。
 

轉載於:https://www.cnblogs.com/hssbsw/archive/2008/09/07/1285905.html

相關文章