Wie ändere ich mysql Zeitzone in Java-Verbindung
Mysql laufen auf GMT+8 aber tomcat laufen auf GMT.
beim speichern datetime in der Datenbank, scheint ok, wenn ich den datetime-Wert in DB, ich sehe die GMT-Wert.
Aber wenn ich versuche den Wert aus der DB, wird der Wert geändert wird, scheint der Wert in DB wird als GMT+8, also java-ändern Sie den Wert auf GMT.
Ich versuche, legen Sie die Verbindungs-url hinzufügen,
useTimezone=true&serverTimezone=GMT
aber nicht
InformationsquelleAutor der Frage Xilang | 2011-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
useTimezone ist eine ältere workaround. MySQL-team schrieb die setTimestamp/getTimestamp code ziemlich vor kurzem, aber es wird nur aktiviert, wenn Sie die Verbindungs-parameter useLegacyDatetimeCode=false und Sie sind mit der neuesten version der mysql-JDBC-connector. So zum Beispiel:
Wenn Sie die download-mysql-connector-source-code und schauen Sie setTimestamp, es ist sehr einfach zu sehen, was passiert:
Wenn die Verwendung von legacy-Datum, Zeit code = false, newSetTimestampInternal(...) aufgerufen wird. Dann, wenn die Kalender übergeben newSetTimestampInternal ist NULL, Ihre date-Objekt formatiert ist, in der Datenbank-Zeitzone:
Ist es sehr wichtig, dass Kalender ist null - so stellen Sie sicher, dass Sie mit:
... NICHT setTimestamp(int,Timestamp,Calendar).
Es sollte offensichtlich sein, jetzt, wie das funktioniert. Wenn Sie konstruieren ein Datum: 5. Januar 2011 3:00 AM in America/Los_Angeles (oder was auch immer, time zone), die über java.util.Kalender und rufen Sie setTimestamp(1, myDate), dann wird es nehmen Sie Ihre Datum, verwenden Sie " = SimpleDateFormat zum formatieren es in der Datenbank-Zeitzone. Also, wenn deine DB wird in America/New_York, es konstruiert den String '2011-01-05 6:00:00' eingefügt werden (seit New York ist vor der LA von 3 Stunden).
Zum abrufen des Datums getTimestamp(int) (ohne Kalender). Es wird wieder die Datenbank verwenden die Zeitzone, zu bauen ein Datum.
Hinweis: Der webserver Zeitzone ist völlig irrelevant jetzt! Wenn Sie nicht setzen useLegacyDatetimecode auf false, ist der webserver Zeitzone wird verwendet für die Formatierung, das hinzufügen von viel Verwirrung.
Hinweis:
Ist es möglich, meine MySQL beschweren, dass die server-Zeitzone ist mehrdeutig. Zum Beispiel, wenn Ihre Datenbank eingestellt ist, EST, möglicherweise gibt es mehrere mögliche EST Zeitzonen in Java, so können Sie diese klären für den mysql-connector, indem Sie erzählt es genau das, was der Datenbank-Zeitzone:
Brauchen Sie nur zu tun, wenn es klagt.
InformationsquelleAutor der Antwort nogridbag