我是用Borland 的 SQL Explorer连接的,不会是他的问题吧。

解决方案 »

  1.   

    你的情况不好办啊。程序里面改字符集是一个做法,但非常麻烦。
    jlandzpa做过这个,但现在这位老兄几乎不来了,可能在itpub还常去。
      

  2.   

    谢谢大家。
    大家帮帮我啊,我这两天已经焦头烂额了。
    服务器A上装的是一个几千万元程序的数据库,而且也有上千个客户端程序,我不可能动服务器A的。
    当我试着把客户端改动,可以看到服务器B上的汉字信息时,它就看不到服务器A上的了。
    我把CSDN相关的贴子都看过了,能试的办法都试过了,实在是没辙了,才来问的。
      

  3.   

    我今天又在服务器B上重装了win2000Server系统和oracle8,还是无法解决,郁闷!
      

  4.   

    B机上安装数据库时,创建的数据库也用US7ASCII字符集,不要选择其他字符集,注意:数据库中数据使用的字符集一般在创建时就已确定了。
    然后,客户端设置为 AMERICAN_AMERICA.US7ASCII即可
      

  5.   

    重装客户端系统,并安装且仅安装一个高版本的ORACLE客户端
      

  6.   

    我问了:服务器A用的是AMERICAN_AMERICA.US7ASCII。
    但当我在服务器B上也用AMERICAN_AMERICA.US7ASCII时,在服务器B就无法正常显示汉字信息,用SQLPLUS*WORKSHEET眼睁睁插进去一个汉字,用Select 语句显示出来就是乱码,为什么在服务器A用AMERICAN_AMERICA.US7ASCII正常,而服务器B却不行呢?
      

  7.   

    注册表中(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改变现有数据库不会破坏数据,否则...最好多看帮助。
      

  8.   

    谢谢pipai,君一席话,令吾收益非浅。
    我试试。
      

  9.   

    再次感谢pipai,成功!!!
    接分!