欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle 服务器字符集和pl/sql字符集有关问题,

更新时间: 2014-01-05 02:15:37 责任编辑: Author_N1

 

Oracle 服务器字符集和pl/sql字符集问题,求救!!!
这是 Oracle 服务器 字符集:SIMPLIFIED CHINESE_CHINA.AL32UTF8

这是注册表里的:SIMPLIFIED CHINESE_CHINA.ZHS16GBK


使用 plsql登录时提示字符集的 2% 不一致,于是把注册表里改了SIMPLIFIED CHINESE_CHINA.AL32UTF8 , 一致了!!


问题:

服务器:CHINESE_CHINA.AL32UTF8
客户端:CHINESE_CHINA.AL32UTF8

我登录 sqlplus 后,命令输入了:select top 2 * from emp;

我知道 top 2 * 会提示错误:为什么错误是乱码?????


于是我又把注册表改回 ZHS16GBK,服务器还是 AU32UTF8,正常了!

怎么办? 如果字符集一致,sqlplus会出乱码,如果不一致,就正常!



我不想改服务器字符集
--参考方法--
不用改字符集啊。不一致就不一致呗。
提示就提示去呗。
我的plsql也提示。
不影响数据库的操作就行。
--参考方法--
--要解决这个问题有两种方法

--一个是,利用INTERNAL_USE 关键字修改区域设置,

--还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>alter database national character set internal_use utf8;

SQL>alter database character set internal_use zhs16gbk;

SQL>SHUTDOWN immediate;

SQL>startup;

--如果按上面的做法做,National charset的区域设置就没有问题

--2、修改dmp文件字符集

--上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘

--骗’过oracle的检查。
--这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我---们常用的一些字符集,
--如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响----不--大。

--具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。

--比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:   
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

0354

--然后将dmp文件的2、3字节修改为0354即可。

--如果dmp文件很大,用ue无法打开,就需要用程序的方法了

--参考方法--
字符集不一致的原因的,oracle默认字符集zhs16GBK。一般的oracle安装好后
字符集是不需要修改的,如果修改也要遵循一定的原则的,超集与子集的关系相互的转化时
没有任何问题的。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:15:37
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7650/
本文WWW.DOC100.NET DOC100.NET版权所有。