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

Oracle中文亂碼解決辦法總結,oracle亂碼解決辦法

編輯:Oracle教程

Oracle中文亂碼解決辦法總結,oracle亂碼解決辦法


AMERICAN_AMERICA.WE8ISO8859P1,這個字符編碼是西歐字符編碼,對應於.Net的就是iso-8859-1字符編碼,所以只需要改到系統的默認字符編碼就行了.

解決方法:

(1) 服務器端重新安裝ORACLE

  在重新安裝ORACLE 時選擇與原卸出數據一致的字符集(本例為US7ASCII)。

  加載原卸出的數據。

  這種情況僅僅使用於空庫和具有同一種字符集的數據。

(2)

寫一個函數:

代碼如下 復制代碼
/**//// <summary>
/// 將西歐字符編碼轉換成GB2312
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string Convert8859P1ToGB2312(string s)
{
return System.Text.Encoding.Default.GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(s));
}

(3)強行修改服務器端ORACLE當前字符集

在用imp命令加載數據前,先在客戶端用sql*plus登錄system DBA用戶,執行下列SQL語句進行當前ORACLE數據庫字符集修改:

代碼如下 復制代碼
SQL > create database character set US7ASCII
  * create database character set US7ASCII
  ERROR at line 1:
  ORA-01031: insufficient privileges


(3)顯示中文亂碼

在Redhat上安裝Oracle 10g沒有設定字符集,采用的是操作系統默認字符集:WE8ISO8859P1,將字符集修改為:ZHS16GBK。由於過程不可逆,首先需要備份數據庫。
1.數據庫全備

代碼如下 復制代碼
2.查詢當前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1

3.關閉數據庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

4.啟動數據庫到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.

5.限制session

SQL> alter system enable restricted session(www.111cn.net);
System altered.

6.查詢相關參數並修改

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.

7.打開數據庫

SQL> alter database open;
Database altered.

8.修改字符集

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.

9.查詢當前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET ZHS16GBK

10.關閉數據庫

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

11.啟動數據庫到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.

12.將相關參數改回原來值

SQL> alter system set job_queue_processes=10;
System altered.

13.打開數據庫

SQL> alter database open;
Database altered.

from:http://www.111cn.net/database/Oracle/45120.htm


ORACLE顯示中文為亂碼

在Redhat上安裝Oracle 10g沒有設定字符集,采用的是操作系統默認字符集:WE8ISO8859P1,將字符集修改為:ZHS16GBK。由於過程不可逆,首先需要備份數據庫。
1.數據庫全備

2.查詢當前字符集
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1

3.關閉數據庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

4.啟動數據庫到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.

5.限制session
SQL> alter system enable restricted session;
System altered.

6.查詢相關參數並修改
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.

7.打開數據庫
SQL> alter database open;
Database altered.

8.修改字符集
SQL> alter database character set ZHS16G......余下全文>>
 

oracle中文字亂碼的問題

原因:你的oracle服務器的字符集和你客戶端的字符集不一致
服務器查看字符集:
select * from v$nls_parameters
客戶端(win7)就是查看注冊表了
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORADB10G_HOME1
雙擊NLS_LANG修改成和服務器一樣的字符集

如果是在服務端產生的,
export NLS_LANG="Simplified Chinese_china".ZHS16GBK
或者
vi .bash_profile NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG
source .bash_profile
就可以了
 

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