以下是从Hibernate生成的查询(除了我用*替换了字段列表):
select *
from
resource resource0_,
resourceOrganization resourceor1_
where
resource0_.active=1
and resource0_.published=1
and (
resource0_.resourcePublic=1
or resourceor1_.resource_id=resource0_.id
and resourceor1_.organization_id=2
and (
resourceor1_.resource_id=resource0_.id
and resourceor1_.forever=1
or resourceor1_.resource_id=resource0_.id
and (
current_date between resourceor1_.startDate and resourceor1_.endDate
)
)
)
目前我在Windows和Linux数据库中都有200条记录,目前每条记录都有以下情况:
active = 1
发表= 1
resourcePublic = 1
当我在sql客户端中直接运行时,此SQL查询会在Windows上获取所有匹配的记录,但在Linux上没有.我在Windows和Linux上都有MysqL 5.1.
如果我应用布尔逻辑(true和true以及(true或者其他)),我希望结果是真的.在Windows上确实如此,但在Linux上却是假的!
如果我按以下方式修改查询,它适用于Windows和Linux:
select *
from
resource resource0_
where
resource0_.active=1
and resource0_.published=1
and (
resource0_.resourcePublic=1
)
因此,只有与resourceOrganization相关的条件的存在使得查询在Linux上带来0结果并且我预期因为它是’或’条件的第二部分,其第一部分为真,结果应该是真的.
任何想法为什么这两个操作系统之间的行为差异以及为什么显然可以在Linux上工作的原因不一样!
提前致谢!
解决方法:
>检查case sensitivity and collation sets(Collation issues)
>检查table case sensitivity.特别注意,在Windows上,表名不区分大小写,在Linux上它们区分大小写.
>您是否在两个系统上都尝试过一个简单的测试用例?