天天看點

oracle 11g 檢視服務端/用戶端編碼,及修改db編碼

oracle 如果server與client端的編碼不一緻,asp.net讀取db記錄顯示時,就可能出現亂碼

檢視oracle服務端編碼:select * from sys.nls_database_parameters;

檢視client編碼:select * from sys.nls_session_parameters;

如果二端編碼不一緻,可以修改用戶端的編碼:

regedit打開系統資料庫:

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1

修改NLS_LANG的值,一般為 SIMPLIFIED CHINESE_CHINA.ZHS16GBK (簡體中文編碼,這也是oracle安裝時預設的編碼),如果服務端是utf8,該值需要修改成SIMPLIFIED CHINESE_CHINA.AL32UTF8

tips:如果不記得字元串,也可以通過在服務端運作 select userenv('language') from dual; 檢視

此外,如果使用pl/sql devloper,該軟體啟動時,也會檢測用戶端與服務端之間的編碼差異,如果發現不同,将彈出下面的對話框:

oracle 11g 檢視服務端/用戶端編碼,及修改db編碼

要想去掉這個提示:修改HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_client_x86下NLS_LANG的値即可

(注:經本人實際測試發現,修改了系統資料庫後,雖然這個提示框不再彈出,但有可能導緻oracle自帶的sqlplus出現亂碼,是以建議還是直接第一次彈出該視窗時,直接勾上 Don't show this message again為好,眼不見為淨)

修改db編碼的辦法:(在oracle 11g上通過測試)

SQL> conn system as sysdba;

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter system enable restricted session;

SQL> alter system set job_queue_processes=0;

SQL> alter database open;

SQL> alter database character set internal_use AL32UTF8;

SQL> startup 

 最後再記錄幾個常用的oracle sql指令:

給使用者(hr)解鎖:

alter user hr account unlock;

修改使用者(hr)密碼(新密碼為hr):

alter user hr identified by hr;

授權(emp)表的select權限給使用者(hr):

grant select on emp to hr;

取消授權:

remove select on emp from hr;