共计 3269 个字符,预计需要花费 9 分钟才能阅读完成。
如何通过 ZHS16GBK 和 AL32UTF8 字符编码分析 exp/imp,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
实验环境:vmware server + rhel5.4(英文版操作系统)+oracle10g
问题描述:同事在 Linux 下安装的 Oracle,默认的字符集没有修改,使用的是 WE8ISO8859P1,不能够支持中文,
问题表现为,客户端录入的中文数据可以显示,提交之后再查询出来后中文会显示为???。问题出在 oracle 服务端的字符集不支持中文导致。
可以通过:
select userenv(language) from dual; 命令可以查看服务端的使用的字符集。
或者 select * from V$NLS_PARAMETERS; 命令也可以
以及 select * from SYS.PROPS$;
确定了问题后就 Google 了一下,网上倒是有很多这方面的资料。可能是自己的环境和他们的不一致的原因,按照网上的那些步骤我的问题没有解决。
问题根源找到了就好解决了,参考着网上的资料自己的解决步骤如下:
总的来说有两个思路:
1、重新安装
2、修改字符集
注:第一个方法没有用,觉得重装不是我喜欢的道道,解决问题是根本。所以我选择的是第二种方式。
网上很多人说,oracle 服务端安装好了之后字符集是不可以更改的,实践证明是可以修改的,至少 oracle8 以上的版本都是可以修改的。
我的解决步骤:
1、ssh 登录,切换到 oracle 用户
切换用户命令:su -oracle
之后用 sqlplus 登录 oracle,命令:
:sqlplus /nolog
:connect /as sysdba
这样就登录了。
2、更改字符集
首先 sqlplus 登录后,关闭 oracle 数据库
1.shutdown immediate ;
2.startup mount ;
3.alter system enable restricted session ;
4.alter system set JOB_QUEUE_PROCESSES=0;
5.alter system set AQ_TM_PROCESSES=0;
6.alter database open ;
7. alter database character set INTERNAL_USE ZHS16GBK;
8.shutdown immediate ;
9.startup ;
注:一开始我按照上面的步骤没有解决,因为在第 7 步的时候有的资料提示使用 alter database character set ZHS16GBK; 我试过,这个命令不行,我使用的是 alter database character set INTERNAL_USE ZHS16GBK; 提示修改成功。同样,如果在 startup mount 下命令提示 error 的话,可以尝试在 startup restrict 下运行第七步的命令。
以下是我的调试命令记录,大家可以参考一下,那些提示错误的命令都是执行失败的,可以不必管。
SQL conn /as sysdba
Connected.
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 104859216 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL alter system enable restricted session;
System altered.
SQL alter system set job_queue_processes=0;
System altered.
SQL alter system set aq_tm_processes=0;
System altered.
SQL alter database open;
Database altered.
—- 这是按照网上的步骤执行,但是命令都执行失败,所以这些命令对我的环境来说是不行的
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
— 我也尝试了换用其它的字符集,也是不行,同样报错
SQL alter database character set AL32UTF8;
alter database character set AL32UTF8
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
— 至此网上的步骤调试失败,所以我继续查资料,又进行了如下的调试
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup restrict
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 113247824 bytes
Database Buffers 167772160 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
— 一开始我是用的是如下的命令,结果失败
SQL alter database character set simplified chinese_china.zhs16gbk;
alter database character set simplified chinese_china.zhs16gbk
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
– 我尝试了两次,改成大写也不行,
SQL alter database character set simplified CHINESE_CHINA.ZHS16GBK;
alter database character set simplified CHINESE_CHINA.ZHS16GBK
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
– 最后,我使用了这命令,提示执行成功,之后通过测试中文乱码问题解决
SQL alter database character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 113247824 bytes
Database Buffers 167772160 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL
关于如何通过 ZHS16GBK 和 AL32UTF8 字符编码分析 exp/imp 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。