2013-04-03 67 views
2

我正在使用jadira usertype用於使用Hibernate 4的joda時間。我需要使用jvm日期時間進行存儲和檢索。問題是讀回的日期有2小時的偏移量。我們在UTC + 2。日期在數據庫中正確存儲。該數據庫是MySQL的5。我設置databaseZone和javaZone在全球範圍內我會出廠配置如下:jadira usertype joda time從數據庫中返回不正確的datetime

<prop key="jadira.usertype.autoRegisterUserTypes">true</prop> 
<prop key="jadira.usertype.databaseZone">jvm</prop> 
<prop key="jadira.usertype.javaZone">jvm</prop> 

數據庫本身配置了時區SAST。通過上述配置,例如2008-01-01的日期存儲在數據庫中,並且讀取爲2007-12-31T22:00:00.000 + 02:00。

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime", 
parameters = { @Parameter(name = "databaseZone", value = "jvm"), 
     @Parameter(name = "javaZone", value = "jvm")}) 

如果我在數據庫上運行下面的查詢,

SELECT version() , @@time_zone , @@system_time_zone , NOW() , UTC_TIMESTAMP(); 

我得到的結果:

我一直在使用註解如下,但具有相同的結果也試過這種沒有全局配置
version : 5.5.13 
@@time_zone : SYSTEM 
@@system_time_zone : South Africa Standard Time 
NOW() : 2013-04-03 14:33:12 
UCT_TIMESTAMP() : 2013-04-03 12:33:12 

我在這裏錯過了什麼。據我所知,從使用類型和焦特達,我的配置是正確的。

+0

它看起來像讀取時,數據庫返回UCT,在我的案例日期-2。設置 jvm應該將其轉換爲jvm時區,但此設置似乎不起作用。除非jdbc驅動程序在某處做了些奇怪的事情? – Travers

回答

0

我設法解決thie問題。它發生是由於MySQL驅動程序中的一個錯誤。這裏是a link!我將驅動程序升級到版本mysql-connector-java-6.1.6。因爲我使用databaseZone =「jvm」,所以必須在數據庫屬性中使用serverTimezone = UTC強制數據庫爲UTC。您還必須使用屬性setLegacyDatetimeCode = false爲了讓錯誤修復產生效果

+0

截至目前,最新版本的mysql-connector-java是5.1.29。你怎麼能夠使用6.1.6?我不認爲鏈接的錯誤是相關的。這是非常古老的。 –

相關問題