我将windows下的数据导出,迁移到linux下。结果数据出现乱码。
求好心人帮忙解答如何解决。。谢谢!

解决方案 »

  1.   

    你Linux下面数据库字符集和你windows下面的数据库不一致。
    建议你适当的更改一下。
    查看数据库字符集: select * from sys.props$ where name='NLS_CHARACTERSET'; 修改数据库字符集:
     
     shutdown immediate;
     startup mount exclusive;
     alter system enable restricted session ; --restricted 为约束模式
     alter system set job_queue_processes = 0;
     alter system set aq_tm_processes =0;
     alter database open;
     先执行:alter database national character set AL16UTF16 ;
            如果报错则参照以下信息
     然后执行: alter database character set zhs16GBK ;
            如果报错则参照以下信息
     shutdown immediate ;
     startup
    如果错误信息,请对照一下信息
    如果提示:
            ORA_12717 :Cannot issue ALTER DATABASE NATIONAL CHARACTER SET when NCLOB,NCHAR or NVARCHAR2 data exists 
    则改成以下语句:
    alter database national character set INTERNAL_USE AL16UTF16 ;
    如果提示:
            ORA-12712 :new character set must be a superset of old character set ;
    则更改使用以下语句:
    alter database CHARACTER SET INTERNAL_USE ZHS16GBK;
    如果提示:
            ORA-12721: operation cannot execult where other sessions are active 
    则更改使用以下语句:
    shutdown immediate;
    startup mount exclusive ;
    如果提示:
            ORA-01109:database not open 
    则使用以下语句:
    alter database open ;
    如果提示:
            ORA-12719:operation requires database is in restricted mode ;
    则使用以下语句
    alter system enable restricted session ;
      

  2.   

    其实这个问题很简单。你在Linux下的的数据库中看下编码是多少?
    语句是这样 select usernev('language') from dual
    然后你在注册表中找到一个目录。HKEY_LOCAL_MACHINE、SOFTWARE、Oracle、HOME0、NLS_LANG的值 是不是和你Oracle里面的值是一样的。如果不一样要改成一样的。
      

  3.   

    select userenv('language') from dual
    不好意思这个才是对的。