前幾天新建vmware,安裝好oracle10g數據庫,導入項目中SQL腳本,中文全部顯示亂碼。
現整理網上尋找的答案供大家參考:
1、查詢數據庫當前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; PARAMETER VALUE ---------------------------------------- ---------------------------------------- NLS_CHARACTERSET WE8ISO8859P1如果大家的字符集和我的一樣,則說明可以按照我下面的步驟進行校正。
該問題主要是在按照oracle時沒有選擇字符集采用的是Linux操作系統默認字符集:WE8ISO8859P1
解決辦法:
1、關閉數據庫
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down2、mount啟動數據庫
SQL> startup mount ORACLE instance started. Total System Global Area 205520896 bytes Fixed Size 1266608 bytes Variable Size 100666448 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes Database mounted.3、限制session
SQL> alter system enable restricted session; System altered.4、查看並修改相關參數
SQL> show parameter job_queue_processes; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ job_queue_processes integer 10 SQL> show parameter aq_tm_processes; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 SQL> alter system set job_queue_processes=0; System altered.5、打開數據庫
SQL> alter database open; Database altered.6、修改字符集
SQL> alter database character set ZHS16GBK; alter database character set ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 出現錯誤提示,新字符集必須是老字符集的超集,也就原來字符集是新字符集的子集,可以再Oracle官方文檔上查詢字符集包含關系。下面使用Oracle內部命令internal_use,跳過超集檢查,生產環境不建議使用此方法。 SQL> alter database character set internal_use ZHS16GBK; Database altered.7、再次查看當前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; PARAMETER VALUE ---------------------------------------- ---------------------------------------- NLS_CHARACTERSET ZHS16GBK8、關閉數據庫
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.9、mount啟動數據庫
SQL> startup mount ORACLE instance started. Total System Global Area 205520896 bytes Fixed Size 1266608 bytes Variable Size 100666448 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes Database mounted.10、將上面第4步驟修改的相關參數還原
SQL> alter system set job_queue_processes=10; System altered.11、打開數據庫
SQL> alter database open; Database altered.至此該問題就已經解決了。如果你用PLSQL查看的時候還是亂碼那你在本地在設置一個環境變量:
NLS_LANG 值為SIMPLIFIED CHINESE_CHINA.ZHS16GBK
設置完成後基本就OK了。