PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验
?????????????????????????????????? PL/SQL Developer 在windows7 64位系統下連Oaracle11g64位系統的解決經驗
一、問題現象及解決方法
現象:
1.PL/SQL 無法登錄64位數據庫
2.在PL/SQL developer中輸入中文,保存后,中文變成'??
'這種亂碼符號
3.導入帶有中文的數據后,中文數據變成'?
?'這種亂碼符號
環境:
1.windows7 64位系統
2.oracle11g 64位系統
3.PL/SQL developer 9.0
解決方法:
1.下載windows32位的instantclient包,并放到某個文件夾下。如果D:\instantclient
2.拷貝D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN到D:\instantclient下
(如果oracle11g安裝文件夾是D:\App\Administrator\Product\11.2.0\dbhome_1\)
3.把tnsnames.ora文件放到D:\instantclient\Network\Admin文件夾下
4.把D:\instantclient加到操作系統的Path路徑的最前面。
5.添加系統環境變量TNS_ADMIN變量的值為D:\instantclient
6.PL/SQL Developer的工具首選項的Oracle主文件夾名為D:\instantclient,OCI庫為D:\instantclient\OCI.DLL
7.核對Oracle11g的字符集和操作系統的字符集是否一致。一致才不會亂碼,如果需一致為ZHS16GBK。
8.假設Oracle11g字符集不是ZHS16GBK。改動oracle11g的字符集為ZHS16GBK
9.添加操作系統環境變量NLS_LANG變量的值為SIMPLIFIED CHINESE_CHINA.ZHS16GBK或AMERICAN.ZHS16GBK
二、經驗教訓
?? 網絡上對于此類問題。大多也是這么解決的。我依照網絡上的方法試了非常多次。還重裝過幾次Oracle。折騰非常久終于才攻克了亂碼問題。
?? 之所以折騰非常久,是由于驗證方法上出現了失誤,在問題解決之前,我一直認為要把之前輸入的中文變成的‘????',使之再次變成中文才算解決這個問題,
?? 實際上再次錄入中文。保存后不變成‘???’即解決亂碼問題,所以細節非常重要。
有的時候,在普遍的方法都是一樣的方法的時候,那么這樣的方法應該是奏效的,至于一次次?? 的操作后,還沒解決這個問題,應該冷靜的想想操作過程。想想細節,問題可能就出在操作細節上,驗證方法上。
?
三、相關知識
1、怎樣查看windows操作系統當前使用的字符集
Chcp
顯示活動控制臺代碼頁數量,或更改該控制臺的活動控制臺代碼頁。假設在沒有參數的情況下使用,則 chcp 顯示活動控制臺代碼頁的數量。
語法
chcp [nnn]
參數
指定代碼頁。
下表列出了全部支持的代碼頁及其國家(地區)或者語言:
代碼頁?????? 國家(地區)或語言
437????????? 美國
708????????? 阿拉伯文(ASMO 708)
?720????????? 阿拉伯文(DOS)
?850????????? 多語言(拉丁文 I)
852????????? 中歐(DOS) - 斯拉夫語(拉丁文 II)
855????????? 西里爾文(俄語)
857????????? 土耳其語
860????????? 葡萄牙語
861????????? 冰島語
862????????? 希伯來文(DOS)
?863????????? 加拿大 - 法語
865????????? 日耳曼語
866????????? 俄語 - 西里爾文(DOS)
869????????? 現代希臘語
?874????????? 泰文(Windows)
?932????????? 日文(Shift-JIS)
?936????????? 中國 - 中文簡體(GB2312)
?949????????? 韓文
?950????????? 繁體中文(Big5)
?1200???????? Unicode???????
1201???????? Unicode (Big-Endian)
?1250???????? 中歐(Windows)
?1251???????? 西里爾文(Windows)
?1252???????? 西歐(Windows)
?1253???????? 希臘文(Windows)
?1254???????? 土耳其文(Windows)
?1255???????? 希伯來文(Windows)
?1256???????? 阿拉伯文(Windows)
?1257???????? 波羅的海文(Windows)
?1258???????? 越南文(Windows)
?20866??????? 西里爾文(KOI8-R)
?21866??????? 西里爾文(KOI8-U)
?28592??????? 中歐(ISO)
?28593??????? 拉丁文 3 (ISO)
?28594??????? 波羅的海文(ISO)
?28595??????? 西里爾文(ISO)
?28596??????? 阿拉伯文(ISO)
?28597??????? 希臘文(ISO)
?28598??????? 希伯來文(ISO-Visual)
?38598??????? 希伯來文(ISO-Logical)
?50000??????? 用戶定義的
?50001??????? 自己主動選擇
?50220??????? 日文(JIS)
?50221??????? 日文(JIS-同意一個字節的片假名)
?50222??????? 日文(JIS-同意一個字節的片假名 - SO/SI)
?50225??????? 韓文(ISO)
?50932??????? 日文(自己主動選擇)
?50949??????? 韓文(自己主動選擇)
?51932??????? 日文(EUC)
?51949??????? 韓文(EUC)
?52936??????? 中文簡體(HZ)
?65000??????? Unicode (UTF-7)
?65001??????? Unicode (UTF-8)
在Windows平臺下,直接在命令行中,輸入下面命令,就會顯示windows操作系統當前使用的字符集:
chcp
影響Oracle數據庫字符集最重要的參數是NLS_LANG參數。
?
它的格式例如以下: NLS_LANG = language_territory.charset
?
它有三個組成部分(語言、地域和字符集),每一個成分控制了NLS子集的特性。
?
當中:
?
Language: 指定server消息的語言, 影響提示信息是中文還是英文
?
Territory: 指定server的日期和數字格式,
?
Charset:? 指定字符集。
?
如:AMERICAN _ AMERICA. ZHS16GBK
?
從NLS_LANG的組成我們能夠看出,真正影響數據庫字符集的事實上是第三部分。
?
所以兩個數據庫之間的字符集僅僅要第三部分一樣就能夠相互導入導出數據。前面影響的僅僅是提示信息是中文還是英文。
?
怎么查看數據庫版本號
?select * from v$version 包括版本號信息,核心版本號信息,位數信息(32位或64位)等
?
2、查看數據庫字符集
?數據庫server字符集select * from nls_database_parameters,其來源于props$,是表示數據庫的字符集。
?
client字符集環境select * from nls_instance_parameters,其來源于v$parameter,表示client的字符集的設置,可能是參數文件,環境變量或者是注冊表
會話字符集環境select * from nls_session_parameters,其來源于v$nls_parameters。表示會話自己的設置。可能是會話的環境變量或者是alter session完畢,假設會話沒有特殊的設置,將與nls_instance_parameters一致。
查詢oracle server端的字符集
?有非常多種方法能夠查出oracle server端的字符集。比較直觀的查詢方法是下面這樣的:
?
?SQL> select userenv('language') from dual;
?
?USERENV('LANGUAGE')
?
----------------------------------------------------
?SIMPLIFIED CHINESE_CHINA.ZHS16GBK
?
?
轉載于:https://www.cnblogs.com/zfyouxi/p/5332086.html
總結
以上是生活随笔為你收集整理的PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac技巧之 Numbers 排除重复表
- 下一篇: Windows错误系统配置提权之系统服务