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
Freigeben: 2025-01-03 09:41:40
Original
266 Leute haben es durchsucht

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage