ORACLE - sqlplus查詢oracle數據庫返回結果爲“?”或者亂碼問題解決

一、介紹:


           1、Oracle字符集是一個字節數據的解釋的符號集合,有大小之分,有相互的包容關係。ORACLE支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索

數據。它使數據庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平臺。


 2、如何查詢Oracle的字符集
ORACLE有三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做數據導入的時候,需要這三個字符集都一致才能正確導入。

2.1--查看當前DOS輸出字符集
chcp --查看當前DOS編碼集

chcp 代碼頁 --修改當前DOS編碼集


2.2 --查看oracle server端的字符集(這個是最終顯示的字符集)

select userenv('language') from dual;


!:由上面可以看到此時的Oracle服務端的編碼集爲:chinese_china.AL32UTF8;(utf-8)

而我們的DOS的編碼集爲:GBK Supports Simplified Chinese(支持簡體中文的GBK)(活動代碼頁 936)

發生亂碼,且爲 “?”。

在這裏給出 代碼頁 對應的編碼集

    * 437 — The original IBM PC code page
    * 932 — Supports Japanese
    * 936 — GBK Supports Simplified Chinese
    * 949 — Supports Korean
    * 950 — Supports Traditional Chinese
    * 1200 — UTF-16LE Unicode little-endian
    * 1201 — UTF-16BE Unicode big-endian
    * 65000 — UTF-7 Unicode
    * 65001 — UTF-8 Unicode
    * 10000 — Macintosh Roman encoding (followed by several other Mac character sets)
    * 10007 — Macintosh Cyrillic encoding
    * 10029 — Macintosh Central European encoding
    * 20127 — US-ASCII The classic US 7 bit character set with no char larger than 127
    * 28591 — ISO-8859-1 (followed by ISO-8859-2 to ISO-8859-15)

2.3 -- 設置Oracle client端的字符集讓其與Oracle server端一致

從上面的操作我們可以看到oracle server端的編碼集爲 utf-8,我們也把 oracle client端設置爲utf-8)

進入當前用戶下,執行:

set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8

或者

set NLS_LANG=american_america.AL32UTF8

此時我們再進入sqlplus看一下中文的顯示情況:

從上面可以看出當 oracle server和oracle client均爲utf-8,而dos的編碼爲 gbk,結果顯示亂碼,且亂碼爲“涓滆帪”;

這應該是utf-8編碼 轉到gbk編碼是發生的亂碼!。

2.4 --將 DOS 編碼集設置爲 oracle 兩端一致的編碼集 utf-8,也就是代碼頁:65001

再次sqlplus,並查詢數據,結果如下:


這時發現還是亂碼,不急我們要修改窗口屬性,改變字體

在命令行標題欄上點擊右鍵,選擇"屬性"->"字體",將字體修改爲True Type字體"Lucida Console",然後點擊確定將屬性應用到當前窗口。

發佈了116 篇原創文章 · 獲贊 18 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章