现假设有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类型配置的问题,难道就是所谓的语言环境区别(编码方式不同,但这对英文也起作用?),就会造成这样的差别,迷惑呀,请高手赐教,感激不尽.
现有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类型配置的问题,难道就是所谓的语言环境区别(编码方式不同,但这对英文也起作用?),就会造成这样的差别,迷惑呀,请高手赐教,感激不尽.
解决方案 »
- oracle insert语句:序列(号)不存在
- 关于精简版 Express Edition 和程序版 Application Express(oracle 10g)
- 现表table中有一字段value ,但字段value的值都为null ,我想给value字段设置默认值都为2 ,请问怎么设置?
- dense_rank()在子查询导致sql运行速度变慢
- ORACLE存储中的日期问题
- ENABLE VALIDATE?
- SQL过长?还是其他原因~求解
- 菜鸟请教一个问题:
- 存储过程的SQL语句中,IN的使用方法
- oracle的bug?
- 向oracle中一次插入多条记录
- Oracle 的sql语法与sql2005的sql语法有什么不同?
不应该是字符集(编码)问题。因没有连接过这么远的数据库,且对hibernate 不太熟悉,考虑是否为:
1.hibernate设置上的问题?
2.使用程序上的问题?
3.数据远程传输上的问题?
或许你的hibernate写的也没有问题
建议跟踪一下hibernate执行sql的过程
所以,是不是有可能,hibernate在访问DB的时候,会去判断本地字符集与DB字符集是否相符,在未定义返回类型的前提下,如果相符则select 字符串常量返回的也是字符串常量,如果不相符则字符串常量会被截取首个字符返回Character类型。
条件是:我本机和DB-A在大陆,DB-B在台北。