不同的結果產生由Hibernate查詢以下(除了我換成*字段列表):SQL查詢執行 - 在Windows和Linux
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
)
)
)
目前,我有200多個記錄Windows和Linux的數據庫,目前每個記錄,將發生以下情況是真實的: 活躍= 1 公佈= 1 resourcePublic = 1
當我直接在SQL客戶端運行這個,這個SQL查詢獲取我所有的匹配記錄在Windows上但沒有在Linux上。我在Windows和Linux上都安裝了MySQL 5.1。
如果我應用布爾邏輯(true和true和(true或whatever)),我期望結果是真實的。在Windows上確實如此,但在Linux上是錯誤的!
如果我修改查詢,如下,它可以在Windows和Linux:
select *
from
resource resource0_
where
resource0_.active=1
and resource0_.published=1
and (
resource0_.resourcePublic=1
)
因此,有關resourceOrganization條件只存在正在查詢帶來的Linux 0的結果和我預料既然它是第一部分是真的'或'條件的第二部分,結果應該是真實的。
任何想法爲什麼這兩個操作系統之間的行爲差異,以及爲什麼顯然應該在Linux上工作不!
在此先感謝!
你100%肯定這是相對於其他的東西一個平臺的問題 - 編碼,用戶權限..... – 2010-10-12 17:38:50
SQL是平臺無關的 - 這很可能是在數據之間的差異Windows與Linux的實例。以兩個mysqldumps,然後將Windows轉儲恢復到Linux實例並再次測試 - 應該像在Windows上一樣工作。 – 2010-10-12 17:46:32
由於您正在使用'current_date()',請檢查兩個系統上的日期。它們是否同步?另外,請檢查你的客戶。某些客戶端不會將1和0轉換爲布爾值。 – 2010-10-12 18:08:41