Oracle服务器端的字符集为AL24UTFFSS
我的客户端为英文版XP, 已经可以支持中文显示和输入,
oracle的NLS_LANG 设成AMERICAN_AMERICA.WE8ISO8859P1,我有个系统是VB做的,在这台XP上用VB系统可以连入oracle
并且可以正确显示和输入中文
但在另外一台简体中文的xp上,NLS_LANG 也设成AMERICAN_AMERICA.WE8ISO8859P1,但他不能显示在上面英文win2000上输入的数据,显示为乱码
如果在这台机输入中文,则可以正常显示(当然在win2000上又不能显示了)总之连同一台Oracle ,客户端NLS_LANG 都设成了一样,为什么不能正确显示彼此输入的数据呢?
盼望高手指教,谢谢.
我的客户端为英文版XP, 已经可以支持中文显示和输入,
oracle的NLS_LANG 设成AMERICAN_AMERICA.WE8ISO8859P1,我有个系统是VB做的,在这台XP上用VB系统可以连入oracle
并且可以正确显示和输入中文
但在另外一台简体中文的xp上,NLS_LANG 也设成AMERICAN_AMERICA.WE8ISO8859P1,但他不能显示在上面英文win2000上输入的数据,显示为乱码
如果在这台机输入中文,则可以正常显示(当然在win2000上又不能显示了)总之连同一台Oracle ,客户端NLS_LANG 都设成了一样,为什么不能正确显示彼此输入的数据呢?
盼望高手指教,谢谢.
换成AMERICAN_AMERICA.WE8ISO8859P1可以输入中文
但问题和楼上说的一样,A机输入的中文只能在A机正常显示,B机输入的中文只能在B机正常显示,在其它机显示都是乱码
(所有的客户端的NLS_LANG都设成AMERICAN_AMERICA.WE8ISO8859P1)
不过楼上这都能看出来,说明还是有看我问题的,:)我的问题经过测试,无论在中文版还是英文版系统,无论xp还是2000,都只能"A机输入的中文只能在A机正常显示,B机输入的中文只能在B机正常显示,在其它机显示都是乱码"
你的那个VB程序?
还是SQL/PLUS之类?你的原因,我想,应该是都是通过VB来追加的数据吧。
追加的数据用同样的单词。
1.你说的用VB追加的数据是什么意思?我在程序里是用最常见的方法insert进去
2.我的VB程序是用ADO连接oracle的,"AMERICAN_AMERICA.AL24UTFFSS的字符集,其实是UNICODE 1.2"的是什么意思?有影响吗?
2。你的ADO连接的时候,设置了什么属性吗?AMERICAN_AMERICA.AL24UTFFSS的字符集,就是UNICODE编码,1。2标准的。它可以写入中文,但是用的是UNICODE编码,不是GB2321国标码。对你的程序没有影响。
3。你用DUMP函数检索过了吗?有什么结果吗?
在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都是乱码
你用了同样的数据。DUMP出来肯定一样的。我的意思是:
让你在A的机器,写入contract_num = 'A-001' 的数据,
在B的机器,写入contract_num = 'A-002' 的数据,
两条记录的custname用一样的中文汉字。
把这两条记录dump出来。
比较一下,不是同一条记录的比较。
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请问是怎么回事?
但是两个OS的编码都不一样,导致写入数据库也不一样。
就是说,写入数据库之前就相当于乱码了。也只有自己的系统认识自己的字体了。
或者你的程序,在写入之前,把字符都换成UNICODE的编码,就可以保持一致了。
AL24UTFFSS支持的UNICODE 1.1标准的,基本上已经被废弃了。
9i以后,已经不支持这个编码了。