有一臺遠端伺服器不能通過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中,就一行是一行的顯示了。