以下是从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上工作的原因并没有!
提前致谢!
答案 0 :(得分:2)
答案 1 :(得分:0)
检查current_date()在两个plataforms中返回相同的格式
答案 2 :(得分:0)
另外,不要忘记检查排序规则和区分大小写,如果一台服务器对另一台服务器使用不同的排序规则,那么您将遇到同样的问题。
答案 3 :(得分:0)
我注意到第二个测试查询只查询资源表而不是resourceOrganisation表。
我怀疑表resourceOrganisation在两台机器上的填充方式不同,并且Linux MySQL中可能不存在相应的行。
此查询返回什么内容?
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
)