现假设有Oracle测试DB:A,B,且2台的环境不同,版本是否相同,不得而知(理论上应该是相同的,公司应该不会用不同版本...)。
现有SQL:select 'TestData' as TEST_DATA from dual,我在本机用hibernate的session.createSqlQuery(),去执行,且未addscalar。
程序连接DB-A时,结果为   'TestData'    ,用TOAD执行sql 结果为  'TestData'    
程序连接DB-B时,结果为   'T'         ,用TOAD执行sql 结果为  'TestData'    然后我在session.createSqlQuery()之后addScalar("TEST_DATA", Hibernate.String),再次执行。
2台DB都返回   'TestData'我疑惑的是,都是在我本机,所以不会出现hibernate版本的问题,而且我用TOAD去执行SQL,结果都一样的。有可能是DB的语言环境不同,一台在上海,一台在台北,但是我select的常量,都是英文呀,这应该不会有影响呀,在程序中,设置断点看返回的结果可以看出,结果为'TestData',那么返回的是Character[],如果结果为'T',那么返回的是Character。因为都是同一个project在本机测试,所以不存在hibernate类型配置的问题,难道就是所谓的语言环境区别(编码方式不同,但这对英文也起作用?),就会造成这样的差别,迷惑呀,请高手赐教,感激不尽.

解决方案 »

  1.   

    可以肯定的是:使用hibernate,程序连接DB-B时,结果为  'T'  是错误的。
    不应该是字符集(编码)问题。因没有连接过这么远的数据库,且对hibernate 不太熟悉,考虑是否为:
    1.hibernate设置上的问题?
    2.使用程序上的问题?
    3.数据远程传输上的问题?      
      

  2.   

    HIBERNATE不太懂,你把ORACLE环境改成一样的再试试。
      

  3.   

    这个应该是hibrate的应用问题,发到java版块解决的还快
      

  4.   

    oracle是没有问题的
    或许你的hibernate写的也没有问题
    建议跟踪一下hibernate执行sql的过程
      

  5.   

    TOAD的查询结果都相同,应该不是Oracle的问题吧,看看你的hibernate吧
      

  6.   

    但是如果说是被截取的话,为什么连DB-A的时候,没有被截取,还是'TestData',连DB-B就被截取为'T'了?,同一支程式。
      

  7.   

    我现在的想法,既然TOAD返回的是正常的,那就不是DB的问题,就是Hibernate的问题,但是hibernate的配置是相同的。
    所以,是不是有可能,hibernate在访问DB的时候,会去判断本地字符集与DB字符集是否相符,在未定义返回类型的前提下,如果相符则select 字符串常量返回的也是字符串常量,如果不相符则字符串常量会被截取首个字符返回Character类型。
    条件是:我本机和DB-A在大陆,DB-B在台北。