oracle 字符亂碼問題解決方案


今天在客戶服務器上遇到了oracle中文亂碼問題,第一個想到的是:要想避免oracle字符亂碼的問題,需要注意oracle客戶端的字符編碼和服務端的字符編碼保持一致。

於是操作如下:

1、查看服務端字符集--結果:服務端是ZHS16GBK
SELECT * FROM NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';

2、於是開始修改客戶端字符集,方式如下:

在運行里面,輸入regedit進入注冊表,HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\里面(最后一項與實例名、數據庫版本有關系),找到NLS_LANG選項,雙擊它,你就可以看到相應的值,修改成AMERICAN_AMERICA.ZHS16GBK
3、查看客戶端字符集--結果:客戶端是AMERICAN_AMERICA.ZHS16GBK(注意:客戶端保證.后面的部分和服務端一致即可)
SELECT USERENV('language') FROM DUAL;

但是做完以上操作如果還是亂碼,於是查看了一下環境變量,發現里面配置了一個NLS_LANG的變量,於是將其值設為AMERICAN_AMERICA.ZHS16GBK,此時直接通過命令行是沒有亂碼問題了,但是嘗試通過plsql查詢數據庫,發現依舊亂碼,這時想到一件事,oracle是64位的,當時通過plsql是不能直接連接的,需要裝32位的客戶端,然后別的同事寫了一個plsqldev.bat文件放到了plsql的根目錄下,才能連接oracle的,於是找到該文件,打開查看,文件內容如下:

@echo off 
set path=C:\app\Administrator\product\instantclient_10_2
set ORACLE_HOME=C:\app\Administrator\product\instantclient_10_2
set TNS_ADMIN=C:\app\Administrator\product\instantclient_10_2
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
start plsqldev.exe

 這時就明白了,該文件中指定的NLS_LANG是AL32UTF8編碼,於是將其改成set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,此時plsql使用的32位的oracle客戶端的編碼就和服務端的編碼保持一致了,都是ZHS16GBK,再嘗試通過plsql查詢數據庫,此時亂碼問題解決了。


免責聲明!

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



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