mysql – SQL查询执行 – Windows和Linux上的不同结果

以下是从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上它们区分大小写.
>您是否在两个系统上都尝试过一个简单的测试用例?

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...