今天在客戶服務器上遇到了oracle中文亂碼問題,第一個想到的是:要想避免oracle字符亂碼的問題,須要注意oracle客戶端的字符編碼和服務端的字符編碼保持一致。sql
因而操做以下:數據庫
一、查看服務端字符集--結果:服務端是ZHS16GBK
SELECT * FROM NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';服務器
二、因而開始修改客戶端字符集,方式以下:oracle
在運行裏面,輸入regedit進入註冊表,HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\裏面(最後一項與實例名、數據庫版本有關係),找到NLS_LANG選項,雙擊它,你就能夠看到相應的值,修改爲AMERICAN_AMERICA.ZHS16GBK
三、查看客戶端字符集--結果:客戶端是AMERICAN_AMERICA.ZHS16GBK(注意:客戶端保證.後面的部分和服務端一致便可)
SELECT USERENV('language') FROM DUAL;
app
可是作完以上操做若是仍是亂碼,因而查看了一下環境變量,發現裏面配置了一個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查詢數據庫,此時亂碼問題解決了。spa