不是应该配什么字符集的问题,有一个原则,即SERVER端和CLIENT端的字符集要一
致,才能正确显示汉字,你在本地的WIN2000的注册表里把字符集改成
ZHS16CGB231280试试HKEY_LOCAL_MACHINE  ->  SOFTWARE -> ORACLE -> HOME0 -> NLS_LANG
还有检查一下  UNIX的 .profile文件de NLS_LANG设置

解决方案 »

  1.   

    SQL> select * from v$nls_parameters
      2  where parameter in ('NLS_CHARACTERSET',
      3                      'NLS_LANGUAGE',
      4                      'NLS_TERRITORY');PARAMETER
    ----------------------------------------------------------------
    VALUE
    ----------------------------------------------------------------
    NLS_LANGUAGE
    AMERICANNLS_TERRITORY
    AMERICANLS_CHARACTERSET
    WE8ISO8859P1根据查询结果,把你的注册表信息改成类似于'AMERICAN_AMERICA.WE8ISO8859P1'这样的格式,也就是NLS_LANGUAGE+'_'+NLS_TERRITORY+'.'+NLS_CHARACTERSET
      

  2.   

    抱歉,速度太慢!
    我已经把2000注册表里的NLS_LANG改为了sun的ZHS16CGB231280 字符集,
    但无效果,仍旧是乱的。
    最后我连 create database character set ZHS16CGB231280 命令都用了,
    把自己的机器的改掉了,仍旧无效。
    对了,我没有设置sun的profile文件的NLS_LANG项,因为我觉得oracle9i在
    sun上运转很正常,所以我没有去设置它,并且我在sun上装oracle9i时选择的是
    针对sun的默认数据库ZHS16CGB231280 。
    格式都是:AMERICAN_AMERICA.ZHS16CGB231280 和 AMERICAN_AMERICA.ZHT16BIG5格式。
    但,至少我觉得无论怎么说,在sun本机上使用insert命令应该不会插入为乱码才对,我用sun的拼音,明明看到的是简体中文,但到了insert命令就变为乱的拉。
    这点不能理解!
    还有我的2000机器,安装oracle9i时默认的字符集为简体中文16gbk,但怎么
    装完后看注册表怎么会是16big5码呢,难道是盗版没有做好?
    现在,我在从装本记的oracle9i,选择字符集为与sun上相同的字符集ZHS16CGB231280 ,等会就知道结果会怎么样。
    请你们帮助我。
      

  3.   

    我想问下,
    一般情况你们的sun服务器端设置什么字符集,
    本机又设置什么字符集!?
      

  4.   

    像Solaris Unix 在建ORACLE数据库的时候一般默认的字符集是 US7ASCII
    不过我是把它设成 ZHS16GBK 的,在 .profile里面是 
    NLS_LANG=AMERICAN_AMERICAN.ZHS16GBK
    export NLS_LANGCLIENT端也是ZHS16GBK
      

  5.   

    你应该检查一下当前数据库的字符集
    select userenv('language') from dual;
    select name||'  '||value$ from sys.props$;
      

  6.   

    查哪个数据库的字符集,是sun还是2000?
      

  7.   

    sun是机器,其操作系统是 UNIX
    2000是操作系统数据库建在机器SUN里面
    是查数据库的字符集,不是sun或2000的字符集
      

  8.   

    进入sun的机器中的sqlplus,用命令:
    sqlplus>select userenv('language') from dual;USERENV('LANGUAGE')
    ----------------------------------------------
    AMERICAN_AMERICA.ZHS16CGB231280进入2000的sqlplus,用命令:
    SQL> select userenv('language') from dual;USERENV('LANGUAGE')
    -------------------------------------------------
    AMERICAN_AMERICA.ZHS16CGB231280两个字符集完全相同,因为我把2000的oracle从新装过了,
    设置的字符集和sun上的oracle一样,可是现在仍旧是乱乱乱码,
    我的程序读2000的中文没有问题,可是对sun的就有问题如旧。
    我想是不是没有设置sun的profile文件的NLS_LANG问题!
      

  9.   

    我把profile文件改了,设置了NLS_LANG=AMERICAN_AMERICAN.ZHS16GBK
    export NLS_LANG
    执行了.profile 文件,环境变量生效了,
    但仍旧是乱字符!
    但有一点我始终不明白,
    为什么我在sun的本机上用insert命令插入中文,
    明明输入法换成了中文拼音,眼看的清清楚楚是中文文字,
    但到了insert命令里却是乱字符,
    这是何解呢?
    想不通啊!
      

  10.   

    .profile改成
    NLS_LANG=AMERICAN_AMERICAN.ZHS16CGB231280
    export NLS_LANG还有再检查一下
    select name||'  '||value$ from sys.props$;有一个概念需要明确,即不管是在sun上登录 到数据库还是在客户端(WIN2000)
    登录,都是登录到sun上的数据库
      

  11.   

    2000系统下执行命令:
    SQL> select name||'  '||value$ from sys.props$;
    select name||'  '||value$ from sys.props$
                                       *
    ERROR at line 1:
    ORA-12571: TNS:packet writer failure
    sun下执行命令:
    Connected.
    SQL>
    SQL> SQL> select name||'  '||value$ from sys.props$;
    select name||'  '||value$ from sys.propsSP2-0734: $
      unknown command beginning "SQL> selec..." - rest of line ignored.
    SQL>   2                                   *
      3  ERROR at line 1:
      4  ORA-12571: TNS:packet writer failure
    都是用sys用户登入的!这条命令是做何用的,怎么返回这些错误!还有就是明确一件事,
    那就是我在sun上有个数据库实例,2000下也有一个数据库实例,
    我编的delphi程序登入的是2000下的实例对字符集处理正常,
    对sun下的实例处理不正常,这是两个不同的实例。
    至于NLS_LANG=AMERICAN_AMERICAN.ZHS16CGB231280
    export NLS_LANG
    我也设置了!
    难道说只能在sun和2000下都设置成AMERICAN_AMERICAN.ZHS16GBK字符集才行!
      

  12.   

    对于:ORA-12571: TNS:packet writer failure
    请检查  .profile里面有没有如下语句
    ORACLE_HOME=/oracle/oracle8i
    export ORACLE_HOME
    ORACLE_SID=your_sid
    export ORACLE_SID还有,你说2000上也有实例,我就不太明白,你在2000上也建了数据库了?
    可能你的2000上的数据库的字符集和sun上的数据库的字符集不一致。还有,你也可以把sun上的数据库的字符集改成 UT8试试,也许就可以了,
    不过改成UT8后,每个汉字会变成三个字节长度。这个问题的根本解决办法还是重新安装ORACLE,重建数据库,在建立数据库的时候
    一律使用统一的ZHS16GBK
      

  13.   

    我在2000下建了一个oracle数据库实例是为了调试方便而用,
    至于最后还是要把程序用来调试sun下的oracle数据库实例。
    至于sun下的 .profile里面如下语句
    ORACLE_HOME=/oracle/oracle8i
    export ORACLE_HOME
    ORACLE_SID=your_sid
    export ORACLE_SID
    均有,否则我不能在sun本机上建立数据库实例,及操作它,
    但我现在已经把2000的oracle从装了,设置其字符集为与sun上oracle相同的
    AMERICAN_AMERICAN.ZHS16CGB231280字符集(这也是一种简体中文字符集),可是为何仍旧会出现乱码,按道理说服务器和客户端的字符集已经统一了啊。
    还有就是我在sun本机上用insert命令插入中文文字时为何在insert命令里就变成了乱码,而我明明换了输入法为拼音,并且在输入法里看到的字为中文,到了insert里就变了呢?
    我的solaris5。8操作系统选的字符也16GBK,简体中文。
    至于你说在建立数据库的时候一律使用统一的ZHS16GBK,应该是在安装oracle数据库时选择这个ZHS16GBK字符集吧,不应该是建立数据库实例时吧,建立数据库实例时应该选择默认字符集AL16UTF16才对吧?