目的:在客户端正常的显示两台服务器的汉字内容信息。
其中一台oracle服务器(A)我不能控制,我甚至不知道装的是什么字符集。
另一台oracle服务器(B)我可以控制。
客户端连着这两台oracle 服务器,客户端的字符集只有是AMERICAN_AMERICA.US7ASCII 时才能正常的显示服务器A的汉字信息,我试过SIMPLIFIED CHINESE_CHINA.ZHS16GBK 和 AMERICAN_AMERICA.WE8ISO8859PI以及AMERICAN_AMERICA.ZHS16GBK 都不才能正常的显示服务器A的汉字信息,显示出来是乱码。所以我就想更改oracle服务器(B)的字符集以实现目的,可是我在也oracle服务器(B)做了以上字符集的改动,就是无法在客户端正常的显示服务器B的汉字信息(在不改动客户端的字符集,以保证正常的显示服务器A的汉字信息的情况下)
。就是说,客户端无法同时正常的显示两台服务器的汉字内容信息。
怎么办,大家帮帮我啊!
---------------------------------------------------------------
注册表中(Windows)或环境变量中(UNIX/LINUX下)中语言设置AMERICAN_AMERICA.US7ASCII只是决定当前机器上Oracle应用程序或数据库工具对实际数据库中数据显示格式或字符集的翻译,并不影响实际数据库中的语言设置。Oracle数据库实际语言设置是在创建库时决定的,通过改执行机上的上述设置,并不会对数据库中的语言及字符集配置产生影响,当然,可以通过alter database语句修改库的语言及字符集设置,这也有一定限制,如可能使库中已存在的数据无用。
AMERICAN_AMERICA.US7ASCII中前面AMERICAN_AMERICA决定了Oracle返回信息的语言类别,如ORA-XXXXX的出错信息为英语显示,你用SIMPLIFIED CHINESE.US7ASCII,则显示为中文信息,当然,前提是你安装了相应语言的MSG文件,另还决定了日期、货币等缺省显示格式;AMERICAN_AMERICA.US7ASCII中后面的US7ASCII决定该机上执行的Oracle应用程序或管理工具对数据库中字符型数据字符集的翻译理解。
根据你的叙述,基本可断定A机数据库字符集为US7ASCII(注意:不是指A机上的环境或注册表设置,一般,字符集在创建库时已确定,实际运行的系统不可能对数据库字符集进行更改,因为可能破坏数据),而B机的数据库字符集不是US7ASCII,最简单的方法,你应删除B机上的实例后重建,重建时注意选择正确的字符集,为保证兼容性,至于客户机的环境或注册表设置必须为XXX.US7ASCII,XXX不作特别要求.如不允许重建B机数据库,则只能修改,8i下运行svrmgrl,一般如下:
SVRMGR>connect internal;
SVRMGR>Shutdown immediate;
SVRMGR>startup mount;
//断开网线,并无其他程序访问数据库,则下三句可以不要
SVRMGR>alter system enable restricted session;
SVRMGR>alter system set job_queue_processes=0;
SVRMGR>alter system set aq_tm_processes=0;
SVRMGR>alter database open;
SVRMGR>alter database character set US7ASCII; //影响char, varchar2, CLOB等
SVRMGR>alter database national character set US7ASCII;//影响nchar, nvarchar2, NCLOB等
SVRMGR>Shutdown immediate;
SVRMGR>startup;
Oracle中的语言及字符集含义非常复杂,某些字符集有一定的兼容性,可能字符集X是字符集Y的子集,或正巧你数据库中已存在地数据对于X、Y正好相同,则通过alter database改变现有数据库不会破坏数据,否则...最好多看帮助。