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 WE8ISO8859P13.关闭数据库
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.4.启动数据库到mount状态
SQL> startup mount
ORACLE instance started.Total System Global Area 205520896 bytesFixed Size 1266608 bytesVariable Size 100666448 bytesDatabase Buffers 100663296 bytesRedo Buffers 2924544 bytesDatabase 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 10SQL> show parameter aq_tm_processes;
NAME TYPE VALUE------------------------------------ ----------- ------------------------------aq_tm_processes integer 0SQL> 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 ZHS16GBK10.关闭数据库
SQL> shutdown immediate
Database closed.Database dismounted.ORACLE instance shut down.11.启动数据库到mount状态
SQL> startup mount
ORACLE instance started.Total System Global Area 205520896 bytesFixed Size 1266608 bytesVariable Size 100666448 bytesDatabase Buffers 100663296 bytesRedo Buffers 2924544 bytesDatabase mounted.12.将相关参数改回原来值
SQL> alter system set job_queue_processes=10;
System altered.13.打开数据库
SQL> alter database open;
Database altered.from: