Beheben von MySQL-Zeitzonendiskrepanzen in Java-Datenbankverbindungen
In bestimmten Szenarien können die Zeitzonen der MySQL-Datenbank und die Zeitzonen des Java-Servers zu Inkonsistenzen führen beim Arbeiten mit Datum/Uhrzeit-Werten. Dieser Artikel befasst sich mit diesem Problem und bietet eine umfassende Lösung mithilfe des MySQL-JDBC-Connectors.
Das Problem ergibt sich aus dem Standardverhalten von MySQL, die Zeitzone „GMT 8“ zu verwenden, während Tomcat mit „GMT“ arbeitet. Diese Diskrepanz führt dazu, dass falsche Datums-/Uhrzeitwerte in der Datenbank gespeichert und in Java abgerufen werden.
Um dies zu beheben, muss die Verbindungs-URL so geändert werden, dass sie die folgenden Parameter enthält:
Dieser Ansatz wurde jedoch durch eine robustere Lösung mit der ersetzt Verwendung von useLegacyDatetimeCode=false. Dieser Parameter deaktiviert den alten Datums-/Uhrzeitverarbeitungscode und aktiviert den neuen Zeitstempelverarbeitungsmechanismus im MySQL-JDBC-Connector.
Durch die Einstellung von useLegacyDatetimeCode=false kann der Java-Code beim Festlegen von Zeitstempeln ein Kalenderobjekt angeben . Dieses Kalenderobjekt sollte null sein, da seine Anwesenheit dazu führen würde, dass Datums-/Uhrzeitwerte basierend auf der Zeitzone des Webservers formatiert werden, was zu Verwirrung führen würde.
Um Datums-/Uhrzeitwerte korrekt abzurufen, muss getTimestamp(int) verwendet werden Die Methode sollte ohne Angabe eines Calendar-Objekts verwendet werden. Dadurch wird sichergestellt, dass für die Formatierung ausschließlich die Zeitzone der Datenbank verwendet wird.
Es ist wichtig zu beachten, dass die Zeitzone des Webservers bei diesem Ansatz irrelevant wird. Wenn sich MySQL außerdem über eine mehrdeutige Serverzeitzone (z. B. EST) beschwert, kann diese explizit in der Verbindungs-URL mit serverTimezone=
Diese Lösung hat erhebliche Auswirkungen verbesserte die Genauigkeit der Datum/Uhrzeit-Verarbeitung bei der Verbindung mit MySQL-Datenbanken aus Java-Anwendungen.
Das obige ist der detaillierte Inhalt vonWie löst man MySQL- und Java-Zeitzonenkonflikte in Datenbankverbindungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!