--查詢oracle server端的字符集
select userenv('language') from dual;sql
--數據庫服務器字符集,其來源於props$,是表示數據庫的字符集
select * from nls_database_parameters;
--客戶端字符集環境,其來源於v$parameter,表示客戶端的字符集的設置,多是參數文件,環境變量或者是註冊表
select * from nls_instance_parameters;
--會話字符集環境,其來源於v$nls_parameters,表示會話本身的設置,多是會話的環境變量或者是alter session完成,若是會話沒有特殊的設置,將與nls_instance_parameters一致
select * from nls_session_parameters;數據庫
一、首先以sysdba的身份登陸上去 conn system as sysdba服務器
二、關閉數據庫shutdown immediate;session
三、以mount打來數據庫,startup mountoracle
四、設置session編碼
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;server
五、啓動數據庫
alter database open;cmd
六、修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
這會可能會報錯,提示咱們的字符集:新字符集必須爲舊字符集的超集,這時咱們能夠跳過超集的檢查作更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
這條語句就能夠了,TERNAL_USE提供的幫助就會使oracle繞過了子集與超集的驗證,這條語句和上面的語句內部操做時徹底相同的。it
七、關閉,從新啓動
SQL>shutdown immediate;
SQL> startup
固然字符集最好不要輕易修改,由於這會對數據庫的數據有直接的影響,若是是生產環境的話,可能會形成不可估計得損失。io
根據上面的7個步驟就完成了數據庫服務器端字符集的修改了,若是在cmd裏面用sqlplus登陸了數據庫,繼續顯示亂碼,就是系統環境變量的緣由了。
解決辦法:
修改本地環境變量,設置 NLS_LANG = SIMPLIFIED CHINESE.ZHS16GBK //這個是咱們的數據庫字符編碼
瞭解內容:
NLS_LANG格式: NLS_LANG = language_territory.charset 有三個組成部分(語言、地域和字符集),每一個成分控制了NLS子集的特性。其中:language 指定服務器消息的語言。 territory 指定服務器的日期和數字格式。 charset 指定字符集