在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...