Oracle数据库从Linux导出,然后在Win2000下导入,数据库中中文字段都显示???。
刚开始导入时提示错误:不支持要求的字符集转换(从类型1到852)
我在网上查了一下,说是Oracle字符集的问题,我也按照很多方法处理过,最后嫩能够导入了,但是查询出来,中文字段都显示???,请各位大侠指点,谢谢!

解决方案 »

  1.   

    你的windows server端的字符集设置的和linux server的不一样,设成一样即可
      

  2.   

    如何查看这两个Server端的字符集?如何修改?谢谢!
      

  3.   

    用show PARAMETERS 看看“nls_language”这个变量的值。一般是设“AMERICAN”吧?
      

  4.   

    首先看下Linux的字符级,Linux下
     $sql>select value$ from sys.props$ where name like 'NLS_CHAR%';exp导出数据windows通过FTP得到文件
    FTP>bin  --传输类型
    FTP>mget 文件名    --获得文件名修改windows数据库字符级与Linux一直运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择 
    SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器  
    端 相 同 的 字 符 集(如:AMERICAN_AMERICAN.US7ASCII)。修改数据库字符级
    sql>conn /as sysdba
    sql>update sys.props$ set value$='US7ASCII' WHERE NAME LIKE 'NLS_CHAR%';
    sql>commit;
    sql>shutdown immediate
    sql>startup
    然后进行IMP操作,  
    虽然用update sys.props$有点危险,但也能解决问题
      

  5.   

    我从Linux导出的信息如下:
    PARAMETER---------------------    VALUE------------------------------------
    NLS_LANGUAGE SIMPLIFIED CHINESE
    NLS_TERRITORY CHINA
    NLS_CURRENCY RMB
    NLS_ISO_CURRENCY CHINA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD-MON-RR
    NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
    NLS_CHARACTERSET ZHS16GBK
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
    NLS_DUAL_CURRENCY RMB
    NLS_NCHAR_CHARACTERSET US7ASCII
    NLS_COMP BINARY
    我的新建的数据库原始的编码都是ZHS16GBK,导入时就报 不支持要求的字符集转换(从类型1到852),如果修改Windows编码,则导入后时???,如果把dmp文件第2、3字节修改成0354,则能导入,但是也是???,请高手指点,谢谢!
      

  6.   

    高手快来帮帮我吧!
    昨天晚上试了好几种方法,Oracle也重新安装了,还是不行,各位帮我看看我应该在建立数据库时怎么设置语言编码?
      

  7.   

    1.主要你先要看你在LINUX上的时候数据库的字符集是什么.然后在WINDOWS上装ORACLE的时候也选用这种字符集 那样就没有问题了
    2.可以通过强制更改字符集来使导入数据不现实乱码,不建议这样做还是以1的做法为准
      

  8.   

    Oracle在建库时就需要设定字符集,如果要求支持中文字符,建库时对数据库字符集通常选ZHS16GBK,国家字符集通常选择UTF8;但楼主的问题是导出来又导入到库中出现了不可识别的乱码,那么可能存在两种情况:一是Linux上的字符集与Windows上的字符集不一致造成的,二是新库的字符集设置不正确.解决方法:
    1. 首先查询你的数据库字符集
    SQL> SELECT *
      2    FROM V$NLS_PARAMETERS
      3   WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');PARAMETER                      VALUE
    ------------------------------ -----------
    NLS_CHARACTERSET               ZHS16GBK
    NLS_NCHAR_CHARACTERSET         UTF82.如果数据库字符集设置没问题,建议你直接用Windows上的Oracle客户端导出来,再用同一个客户端导到库里,应该就可以了,否则你需要重新建库设置好字符集,再行按上述方法导出导入.
      

  9.   

    update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
      

  10.   

    Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。   影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:CODE:NLS_LANG = language_territory.charset 
      它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:   Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK   从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 
      

  11.   

    如何查询Oracle的字符集   很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。   1、查询oracle server端的字符集   有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:CODE:SQL>select userenv(‘language’) from dual; 
      结果类似如下:AMERICAN _ AMERICA. ZHS16GBK   2、如何查询dmp文件的字符集   用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:CODE:SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
    ZHS16GBK 
      如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):CODE:cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6 
      然后用上述SQL也可以得到它对应的字符集。   3、查询oracle client端的字符集   这个比较简单。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:CODE:set nls_lang=AMERICAN_AMERICA.ZHS16GBK 
      这样就只影响这个窗口里面的环境变量。   在unix平台下,就是环境变量NLS_LANG。CODE:$echo $NLS_LANGAMERICAN_AMERICA.ZHS16GBK 
      如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
      

  12.   

    我从Linux下查询结果如下:
    我从Linux导出的信息如下:
    PARAMETER---------------------    VALUE------------------------------------
    NLS_LANGUAGESIMPLIFIED              CHINESE
    NLS_TERRITORY                      CHINA
    NLS_CURRENCY                   RMB
    NLS_ISO_CURRENCY                    CHINA
    NLS_NUMERIC_CHARACTERS                 .,
    NLS_CALENDAR                  GREGORIAN
    NLS_DATE_FORMAT              DD-MON-RR
    NLS_DATE_LANGUAGE             SIMPLIFIED CHINESE
    NLS_CHARACTERSET                 ZHS16GBK
    NLS_SORTBINARY           
    NLS_TIME_FORMAT               HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT             DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT           HH.MI.SSXFF AM TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT          DD-MON-RR HH.MI.SSXFF AM TZH:TZM
    NLS_DUAL_CURRENCY               RMB
    NLS_NCHAR_CHARACTERSET             US7ASCII
    NLS_COMPBINARY                
    但是导入时提示 不支持要求的字符集转换(从类型1到852),但是我的windows下的Oracle设置结果同上面完全相同。如果修改dmp文件的第2、3字节改称0354,则可以导入,但是还是乱码,这种情况怎么办?