现在我有两台服务器:A windows2008 server64 +oracle11.0.7(数据库服务器) 
                    B windows2008 server64 +oracle11.0.7(仅数据库软件)
现在我用B连接到A。
其中在plsql中查询
sql> select userenv('language') As 字符集 from dual;
字符集
------------------------------
simplified chinese_china.zhs16GBK
然而在sqlplus中执行同样的语句 得到的结果是:
AMERICAN_AMERICA.ZHS16GBK.
都是在同一个oracle的用户下面执行的。
请问这个是怎么回事呢?

解决方案 »

  1.   

    应该是查询的两个不同session的language
      

  2.   

    但是我的会话里面没有其他人连接哟。只有一个人连接。
    而且a,b两个服务器的注册表里面的字符集都是simplified chinese_china.zhs16GBK。 
      

  3.   

    用plsql和sqlplus登录的用户名、密码、和服务名是否一样?
      

  4.   

    注册表的项是你客户端的字符编码,而select语句查的才是你服务器的字符编码
      

  5.   

    PL SQL 得到的是你服务器的字符编码
    而SQL PLUS得到的是本地的字符编码
      

  6.   

     
    B服务器用sqlplus来查询,查询结果都是:AMERICAN_AMERICA.ZHS16GBK
    然而我在B服务器的注册表里面查询的字符集为:simplified chinese_china.zhs16GBK。这个怎么回事呢
    ?
      

  7.   

    先看看字符集的含义。AMERICAN_AMERICA以及simplified chinese_china并非字符集最后部分zhs16GBK才是字符集,两者均为zhs16GBK,NO PROBLEM!
      

  8.   

    受教了。谢谢,
    那我就问问 为什么我语言和区域用sqlplus 查询和直接在注册表中查询的不一直呢、。
      

  9.   

    sqlplus的环境变量问题。注册表里一般是全局的,sqlplus的环境涉及具体用户。一般来说,不会存在这个问题,仔细检查你的环境。
      

  10.   


    字符集一样的  ZHS16GBK
      

  11.   

    我一条sql语句始终在B服务器上执行不成功。 
    在A服务器上就能执行成功。 最终查询下来就是 区域与语言的区别。
    都是在.net 下执行的动态语句。
    现在我把B服务器上的oralce卸载后,重新装上后并且选择了 chinese_china ,在来执行这条sql语句就OK了。