sqlplus顯示亂碼解決方法


sqlplus顯示亂碼與三個方面有關

1.數據庫的字符編碼

--查看數據庫的編碼
SELECT * FROM NLS_DATABASE_PARAMETERS;

 

 

本例中,可以看到數據庫中字符串(char,varchar2,clob,long)使用的是AL32UTF8編碼存儲,即UTF8存儲。數據庫中的NCHAR,NVARCHAR等使用的是AL16UTF16編碼存儲,即UTF16存儲。

2.客戶端的字符編碼

通過NLS_LANG環境變量進行設置,設置NLS_LANG環境變量的方式有一下三種:

第一種:設置系統環境變量

右鍵《我的電腦》——》《高級系統設置》——》《環境變量》,設置NLS_LANG=AMERICAN_AMERICA.AL32UTF8

第二種:使用注冊表

安裝Oracle客戶端后,Oracle客戶端會自動在注冊表中新增NLS項目並賦值(賦值的編碼跟隨系統設定)

WIN+R——》regedit——》HKEY_LOCAL_MACHINE——》SOFTWARE——》WOW6432Node——》ORACLE——》KEY_OraClient12Home1_32bit(這里要注意,如果安裝的是64位的Oracle,那么直接在SOFTWARE下就可以找到ORACLE)

 本例中,跟隨系統的是中文繁體,950為繁體,936為簡體。

第三種:sql developer,pl/sql developer,toad for oracle等客戶端會自動設置NLS(沒有找到在哪里看,但猜測是UTF8)

3.終端的字符編碼

終端的字符編碼分類兩類:

第一類:sqlplus調用的CMD終端

 依舊是跟隨系統,設置的為繁體

第二類:toad for oracle等客戶端

這些客戶端會自動設置(沒有看到在哪里看,但猜測是UTF8)

4.從頭到尾過一遍

本例使用sqlplus來過一遍,toad for oracle等客戶端不具有代表性,全部自動設置了

4.1.查看數據庫的字符編碼

SELECT * FROM NLS_DATABASE_PARAMETERS;

因為我測試數據使用的是【varchar2】類型,因此編碼為AL32UTF8

4.2.查看Oracle客戶端的字符編碼

通過2的截圖,可以知道,編碼類型為WIN950,即中文繁體

4.3.查看CMD終端的字符編碼

通過3的截圖,可以知道,編碼類型為950,即中文繁體

4.4.過程梳理

通過以上查詢,可以得出如下流程:當一個查詢發出后,存儲在數據庫中編碼為UTF8的漢字發現客戶端是BIG5,因為會自動轉換,等這個漢字到達客戶單的時候編碼已經變為BIG5了,終端以BIG5的編碼顯示,因此中文繁體的漢字是不會亂碼。但是存儲在數據庫中編碼為UTF8的簡體漢字發現客戶端是BIG5,BIG5中沒有對應簡體的編碼,因此到達客戶端時已經亂碼,在終端顯示肯定為亂碼

接下來修改客戶端編碼為UTF8。這時候,數據庫到客戶端的漢字(繁體或者簡體)都不需要在轉碼了,到達客戶端是UTF8形式編碼的,此時終端使用BIG5顯示,會導致全部亂碼。

接下來我們修改終端編碼為UTF8,此時到達客戶端的是UTF8編碼,終端使用UTF8編碼顯示,就不會亂碼了。

在CMD中使用【chcp 65001】命令可以將CMD編碼設定為UTF8

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM