Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176347
  • 博文数量: 39
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 19:16
文章分类

全部博文(39)

文章存档

2011年(34)

2010年(5)

我的朋友

分类: Oracle

2011-12-10 20:40:43

这是 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 * 会提示错误:为什么错误是乱码?????
 
 
--要解决这个问题有两种方法

--一个是,利用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无法打开,就需要用程序的方法了
阅读(4810) | 评论(0) | 转发(0) |
0

上一篇:数据库操作

下一篇:没有了

给主人留下些什么吧!~~