日期:2014-05-17 浏览次数:20992 次
--要解决这个问题有两种方法 --一个是,利用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安装好后
字符集是不需要修改的,如果修改也要遵循一定的原则的,超集与子集的关系相互的转化时
没有任何问题的。