现假设有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类型配置的问题,难道就是所谓的语言环境区别(编码方式不同,但这对英文也起作用?),就会造成这样的差别,迷惑呀,请高手赐教,感激不尽.
解决方案 »
- Oracle8i和9i中PLSQL程序不同运行结果
- 虚拟机安装oracle的进程问题
- sqlloader时失败了怎么进行rollback
- 100分急求,存储过程中如何使用like模糊查询?
- 如何判断oracle数据库需要的最大license
- 哪有下载安装oracle management server的网址?求求大家了!
- 一条SQL语句中包含多个INSERT INTO语句,要如何连接才是正确结束????
- 我想判断两个日期的大小,精确到小时,有什么好的函数啊?
- SQL 与ORACLE 的区别
- 创建一个存储过程,传入参数作为条件,目的是生成一个表
- 向oracle中一次插入多条记录
- Oracle 的sql语法与sql2005的sql语法有什么不同?
不应该是字符集(编码)问题。因没有连接过这么远的数据库,且对hibernate 不太熟悉,考虑是否为:
1.hibernate设置上的问题?
2.使用程序上的问题?
3.数据远程传输上的问题?
或许你的hibernate写的也没有问题
建议跟踪一下hibernate执行sql的过程
所以,是不是有可能,hibernate在访问DB的时候,会去判断本地字符集与DB字符集是否相符,在未定义返回类型的前提下,如果相符则select 字符串常量返回的也是字符串常量,如果不相符则字符串常量会被截取首个字符返回Character类型。
条件是:我本机和DB-A在大陆,DB-B在台北。