试过,也是乱码。那就是你数据库字符集的问题。看下面的步骤能解决否:需要修改数据库字符集为'us7ascii'。 查看数据库当前数据集有两种方式: a).select name,value$ from props$ where name like '%NLS_CHARACTERSET%', b).select userenv('language') from dual; 1.常规方案修改数据库字符集 1).sys登陆数据库:conn / as sysdba; 2).关闭数据库:shutdown immediate; 3).以mount方式开启数据库:startup mount; 4).限制其它用户连接数据库使用资源: alter system enable restricted session; 5).查看系统当前的进程(最大连接数):show parameter processes;记住job_queue_processes参数的当前值,后面需要修改回来。 6).杀掉CJQ0及相应job进程: alter system set job_queue_processes=0; 7).修改队列监视进程参数alter system set aq_tm_processes=0; 8).更改数据库为open方式:alter database open; 9).更改字符集:alter database character set us7ascii; a).如果当前数据库的字符集是系统字符集us7asci的超集,更改不会出问题;如果不是,将会提示: ORA-12712: 新字符集必须为旧字符集的超集 b).如果数据库数据有CLOB类型,系统将会提示: ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists 2. 针对以上的错误a)的解决方案:使用INTERNAL_USE跳过超集检测 ALTER DATABASE character set INTERNAL_USE us7ascii; 3. 针对以上的错误b)的解决方案:使用internal_convert转换含有CLOB字段的表 1).截断表truncate table Metastylesheet; 2).alter database character set internal_convert zhs16gbk;-- ORACLE会自动转换含有CLOB 3).因为前面清空了SYS.METASTYLESHEET表,需要重新创建 9.2通过运行catmet.sql脚本来重建;@?/rdbms/admin/catmet.sql 10g后通过运行catmeta.sql脚本来重建:@?/rdbms/admin/catmeta.sql (注意这个地方有待商榷,不确定,最好不要使用这种方法修改) 4.完成方案a)和b)后再做如下步骤: 1).查看当前字符集,确认是否正确修改select userenv('language') from dual; 2).解除限制: alter system disable restricted session; alter system set job_queue_processes=10;--修改回开始记录的原始值 3).关闭数据库再打开; 4).简单测试下insert int t values('测试乱码');看还有乱码否
试过,也是乱码。那就是你数据库字符集的问题。看下面的步骤能解决否:需要修改数据库字符集为'us7ascii'。 查看数据库当前数据集有两种方式: a).select name,value$ from props$ where name like '%NLS_CHARACTERSET%', b).select userenv('language') from dual; 1.常规方案修改数据库字符集 1).sys登陆数据库:conn / as sysdba; 2).关闭数据库:shutdown immediate; 3).以mount方式开启数据库:startup mount; 4).限制其它用户连接数据库使用资源: alter system enable restricted session; 5).查看系统当前的进程(最大连接数):show parameter processes;记住job_queue_processes参数的当前值,后面需要修改回来。 6).杀掉CJQ0及相应job进程: alter system set job_queue_processes=0; 7).修改队列监视进程参数alter system set aq_tm_processes=0; 8).更改数据库为open方式:alter database open; 9).更改字符集:alter database character set us7ascii; a).如果当前数据库的字符集是系统字符集us7asci的超集,更改不会出问题;如果不是,将会提示: ORA-12712: 新字符集必须为旧字符集的超集 b).如果数据库数据有CLOB类型,系统将会提示: ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists 2. 针对以上的错误a)的解决方案:使用INTERNAL_USE跳过超集检测 ALTER DATABASE character set INTERNAL_USE us7ascii; 3. 针对以上的错误b)的解决方案:使用internal_convert转换含有CLOB字段的表 1).截断表truncate table Metastylesheet; 2).alter database character set internal_convert zhs16gbk;-- ORACLE会自动转换含有CLOB 3).因为前面清空了SYS.METASTYLESHEET表,需要重新创建 9.2通过运行catmet.sql脚本来重建;@?/rdbms/admin/catmet.sql 10g后通过运行catmeta.sql脚本来重建:@?/rdbms/admin/catmeta.sql (注意这个地方有待商榷,不确定,最好不要使用这种方法修改) 4.完成方案a)和b)后再做如下步骤: 1).查看当前字符集,确认是否正确修改select userenv('language') from dual; 2).解除限制: alter system disable restricted session; alter system set job_queue_processes=10;--修改回开始记录的原始值 3).关闭数据库再打开; 4).简单测试下insert int t values('测试乱码');看还有乱码否 照你的方法试过了,还是不行。。
表里面会是乱码么
Excel的默认编码是ANSI,跟这个应该没关系吧?
试过,也是乱码。那就是你数据库字符集的问题。看下面的步骤能解决否:需要修改数据库字符集为'us7ascii'。
查看数据库当前数据集有两种方式:
a).select name,value$ from props$ where name like '%NLS_CHARACTERSET%',
b).select userenv('language') from dual;
1.常规方案修改数据库字符集
1).sys登陆数据库:conn / as sysdba;
2).关闭数据库:shutdown immediate;
3).以mount方式开启数据库:startup mount;
4).限制其它用户连接数据库使用资源: alter system enable restricted session;
5).查看系统当前的进程(最大连接数):show parameter processes;记住job_queue_processes参数的当前值,后面需要修改回来。
6).杀掉CJQ0及相应job进程: alter system set job_queue_processes=0;
7).修改队列监视进程参数alter system set aq_tm_processes=0;
8).更改数据库为open方式:alter database open;
9).更改字符集:alter database character set us7ascii;
a).如果当前数据库的字符集是系统字符集us7asci的超集,更改不会出问题;如果不是,将会提示:
ORA-12712: 新字符集必须为旧字符集的超集
b).如果数据库数据有CLOB类型,系统将会提示:
ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists
2. 针对以上的错误a)的解决方案:使用INTERNAL_USE跳过超集检测
ALTER DATABASE character set INTERNAL_USE us7ascii;
3. 针对以上的错误b)的解决方案:使用internal_convert转换含有CLOB字段的表
1).截断表truncate table Metastylesheet;
2).alter database character set internal_convert zhs16gbk;-- ORACLE会自动转换含有CLOB
3).因为前面清空了SYS.METASTYLESHEET表,需要重新创建
9.2通过运行catmet.sql脚本来重建;@?/rdbms/admin/catmet.sql
10g后通过运行catmeta.sql脚本来重建:@?/rdbms/admin/catmeta.sql
(注意这个地方有待商榷,不确定,最好不要使用这种方法修改)
4.完成方案a)和b)后再做如下步骤:
1).查看当前字符集,确认是否正确修改select userenv('language') from dual;
2).解除限制:
alter system disable restricted session;
alter system set job_queue_processes=10;--修改回开始记录的原始值
3).关闭数据库再打开;
4).简单测试下insert int t values('测试乱码');看还有乱码否
我服务端和客户端的字符编码是一样的啊,都是WE8ISO8859P1编码。
按照你的方法,我再试下看吧。
试过,也是乱码。那就是你数据库字符集的问题。看下面的步骤能解决否:需要修改数据库字符集为'us7ascii'。
查看数据库当前数据集有两种方式:
a).select name,value$ from props$ where name like '%NLS_CHARACTERSET%',
b).select userenv('language') from dual;
1.常规方案修改数据库字符集
1).sys登陆数据库:conn / as sysdba;
2).关闭数据库:shutdown immediate;
3).以mount方式开启数据库:startup mount;
4).限制其它用户连接数据库使用资源: alter system enable restricted session;
5).查看系统当前的进程(最大连接数):show parameter processes;记住job_queue_processes参数的当前值,后面需要修改回来。
6).杀掉CJQ0及相应job进程: alter system set job_queue_processes=0;
7).修改队列监视进程参数alter system set aq_tm_processes=0;
8).更改数据库为open方式:alter database open;
9).更改字符集:alter database character set us7ascii;
a).如果当前数据库的字符集是系统字符集us7asci的超集,更改不会出问题;如果不是,将会提示:
ORA-12712: 新字符集必须为旧字符集的超集
b).如果数据库数据有CLOB类型,系统将会提示:
ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists
2. 针对以上的错误a)的解决方案:使用INTERNAL_USE跳过超集检测
ALTER DATABASE character set INTERNAL_USE us7ascii;
3. 针对以上的错误b)的解决方案:使用internal_convert转换含有CLOB字段的表
1).截断表truncate table Metastylesheet;
2).alter database character set internal_convert zhs16gbk;-- ORACLE会自动转换含有CLOB
3).因为前面清空了SYS.METASTYLESHEET表,需要重新创建
9.2通过运行catmet.sql脚本来重建;@?/rdbms/admin/catmet.sql
10g后通过运行catmeta.sql脚本来重建:@?/rdbms/admin/catmeta.sql
(注意这个地方有待商榷,不确定,最好不要使用这种方法修改)
4.完成方案a)和b)后再做如下步骤:
1).查看当前字符集,确认是否正确修改select userenv('language') from dual;
2).解除限制:
alter system disable restricted session;
alter system set job_queue_processes=10;--修改回开始记录的原始值
3).关闭数据库再打开;
4).简单测试下insert int t values('测试乱码');看还有乱码否
照你的方法试过了,还是不行。。