程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE中文顯示亂碼及PLSQL亂碼

ORACLE中文顯示亂碼及PLSQL亂碼

編輯:Oracle教程

前幾天新建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 down
2、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                         ZHS16GBK
8、關閉數據庫
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了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved