Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeitzonen richtig handhaben, wenn ich Java mit einer MySQL-Datenbank verbinde?

Wie kann ich Zeitzonen richtig handhaben, wenn ich Java mit einer MySQL-Datenbank verbinde?

Susan Sarandon
Susan SarandonOriginal
2025-01-03 09:41:40252Durchsuche

How Can I Correctly Handle Timezones When Connecting Java to a MySQL Database?

Ändern der MySQL-Zeitzone in Java-Datenbankverbindungen

MySQL arbeitet mit der Zeitzone „GMT 8“, während Tomcat „GMT“ verwendet. Beim Speichern von datetime in der Datenbank scheinen die Werte korrekt zu sein, beim Abrufen werden jedoch die „GMT“-Werte angezeigt. Außerdem werden aus der Datenbank abgerufene Werte in „GMT“ konvertiert, was darauf hindeutet, dass die Datenbank sie als „GMT 8“ betrachtet.

Lösung

Der Parameter „useTimezone“ ist eine veraltete Problemumgehung. Für eine moderne Lösung legen Sie useLegacyDatetimeCode=false fest und führen ein Upgrade auf den neuesten MySQL-JDBC-Connector durch. Eine Beispiel-Verbindungs-URL:

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false

Zeitstempelverarbeitung

Wenn useLegacyDatetimeCode auf false gesetzt ist, wird die Methode newSetTimestampInternal() aufgerufen. Wenn der bereitgestellte Kalender null ist, wird das Datumsobjekt in der Zeitzone der Datenbank formatiert:

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);

Um das Datum abzurufen, verwenden Sie getTimestamp(int) ohne den Kalender. Auch hier wird die Zeitzone der Datenbank zum Erstellen des Datums verwendet.

Irrelevanz der Webserver-Zeitzone

Die Zeitzone des Webservers ist jetzt für die Formatierung irrelevant. Wenn useLegacyDatetimecode wahr bleibt, wird die Zeitzone des Webservers verwendet, was zu Verwirrung führt.

MySQL-Zeitzonenmehrdeutigkeit

MySQL kann sich über Unklarheiten in der Serverzeitzone beschweren, wenn es beispielsweise auf EST eingestellt ist. Um dieses Problem zu beheben, geben Sie die genaue EST-Zeitzone in der Verbindungs-URL an:

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York

Dies ist nur erforderlich, wenn MySQL das Mehrdeutigkeitsproblem aufwirft.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeitzonen richtig handhaben, wenn ich Java mit einer MySQL-Datenbank verbinde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn