Oracle服务器端的字符集为AL24UTFFSS
我的客户端为英文版XP, 已经可以支持中文显示和输入,
oracle的NLS_LANG 设成AMERICAN_AMERICA.WE8ISO8859P1,我有个系统是VB做的,在这台XP上用VB系统可以连入oracle
并且可以正确显示和输入中文
但在另外一台简体中文的xp上,NLS_LANG 也设成AMERICAN_AMERICA.WE8ISO8859P1,但他不能显示在上面英文win2000上输入的数据,显示为乱码
如果在这台机输入中文,则可以正常显示(当然在win2000上又不能显示了)总之连同一台Oracle ,客户端NLS_LANG 都设成了一样,为什么不能正确显示彼此输入的数据呢?
盼望高手指教,谢谢.

解决方案 »

  1.   

    如果我把客户端NLS_LANG 设成AMERICAN_AMERICA.AL24UTFFSS,在客户端输入中文不能insert到数据库
    换成AMERICAN_AMERICA.WE8ISO8859P1可以输入中文
    但问题和楼上说的一样,A机输入的中文只能在A机正常显示,B机输入的中文只能在B机正常显示,在其它机显示都是乱码
    (所有的客户端的NLS_LANG都设成AMERICAN_AMERICA.WE8ISO8859P1)
      

  2.   

    sorry,主贴是我写错了,应该是英文xp
    不过楼上这都能看出来,说明还是有看我问题的,:)我的问题经过测试,无论在中文版还是英文版系统,无论xp还是2000,都只能"A机输入的中文只能在A机正常显示,B机输入的中文只能在B机正常显示,在其它机显示都是乱码" 
      

  3.   

    你是通过什么输入的呢?
    你的那个VB程序?
    还是SQL/PLUS之类?你的原因,我想,应该是都是通过VB来追加的数据吧。
      

  4.   

    你把两个机器追加的数据,用DUMP函数看看,都是些什么。format用1016。结果拿出来看看呢。
    追加的数据用同样的单词。
      

  5.   

    你的VB用的什么连接数据库?ADO?ODBC?RDO?OO4O?AMERICAN_AMERICA.AL24UTFFSS的字符集,其实是UNICODE 1.2的。
      

  6.   

    我是用VB程序输入的,不过用toad insert中文到表里,在另外一台机select出来也是乱码Croatia:
    1.你说的用VB追加的数据是什么意思?我在程序里是用最常见的方法insert进去
    2.我的VB程序是用ADO连接oracle的,"AMERICAN_AMERICA.AL24UTFFSS的字符集,其实是UNICODE 1.2"的是什么意思?有影响吗?
      

  7.   

    1。就是通过你的VB程序来追加的。不是其他的什么环境或者方法。
    2。你的ADO连接的时候,设置了什么属性吗?AMERICAN_AMERICA.AL24UTFFSS的字符集,就是UNICODE编码,1。2标准的。它可以写入中文,但是用的是UNICODE编码,不是GB2321国标码。对你的程序没有影响。
    3。你用DUMP函数检索过了吗?有什么结果吗?
      

  8.   

    A机为英文版win2K,系统已经支持中文输入和显示
    在A上用VB程序insert一条带中文的record
    然后
    select dump('abc',1016) from dual;
    Typ=96 Len=3 CharacterSet=AL24UTFFSS: 61,62,63select dump(custname,1016) from contract where contract_num = 'A-001'
    Typ=1 Len=8 CharacterSet=AL24UTFFSS: ab,a1,a9,ef,aa,ab,bb,f9//custname为中文,在A机无论是VB程序还是toad都能正确显示B机为简体中文XP,运行上面同样的select语句,结果完全一样.
    select dump('abc',1016) from dual;
    Typ=96 Len=3 CharacterSet=AL24UTFFSS: 61,62,63select dump(custname,1016) from contract where contract_num = 'A-001'
    Typ=1 Len=8 CharacterSet=AL24UTFFSS: ab,a1,a9,ef,aa,ab,bb,f9//在B机中,无论是VB程序还是toad中显示custname都是乱码
      

  9.   

    补充一下,我这条记录的custname为4个字的中文
      

  10.   

    有意思。你直接通过SQL/PLUS插入同样的一条数据呢?DUMP出来是什么?顺便问一下,你的B的机器,支持UNICODE编码吗?
      

  11.   

    还有你的测试数据没有问题吗?
    你用了同样的数据。DUMP出来肯定一样的。我的意思是:
    让你在A的机器,写入contract_num =  'A-001' 的数据,
    在B的机器,写入contract_num =  'A-002' 的数据,
    两条记录的custname用一样的中文汉字。
    把这两条记录dump出来。
    比较一下,不是同一条记录的比较。
      

  12.   

    A,B机输入同样的custname,结果是不一样
    A机:
    select dump(custname,1016) from contract where contract_num = 'A-001'
    Typ=1 Len=8 CharacterSet=AL24UTFFSS: ab,a1,a9,ef,aa,ab,bb,f9
    B机
    select dump(custname,1016) from contract where contract_num = 'A-002'
    Typ=1 Len=8 CharacterSet=AL24UTFFSS: ba,e5,cc,a7,ce,ef,83,72请问是怎么回事?
      

  13.   

    因为你的VB程序,在往数据库写数据的时候,数据库本身用的是UNICODE编码。
    但是两个OS的编码都不一样,导致写入数据库也不一样。
    就是说,写入数据库之前就相当于乱码了。也只有自己的系统认识自己的字体了。
    或者你的程序,在写入之前,把字符都换成UNICODE的编码,就可以保持一致了。
      

  14.   

    顺便说一下,
    AL24UTFFSS支持的UNICODE 1.1标准的,基本上已经被废弃了。
    9i以后,已经不支持这个编码了。
      

  15.   

    通过SQL/PLUS写入的结果呢?dump出来是什么。