Maison  >  Article  >  base de données  >  Comment résoudre les conflits de fuseaux horaires MySQL et Java dans les connexions à la base de données ?

Comment résoudre les conflits de fuseaux horaires MySQL et Java dans les connexions à la base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 14:20:12131parcourir

How to Resolve MySQL and Java Time Zone Conflicts in Database Connections?

Résolution des écarts de fuseau horaire MySQL dans les connexions à la base de données Java

Dans certains scénarios, les fuseaux horaires de la base de données MySQL et les fuseaux horaires du serveur Java peuvent entraîner des incohérences lorsque vous travaillez avec des valeurs datetime. Cet article aborde ce problème et fournit une solution complète utilisant le connecteur MySQL JDBC.

Le problème provient du comportement par défaut de MySQL consistant à utiliser le fuseau horaire « GMT 8 » alors que Tomcat fonctionne sur « GMT ». Cet écart entraîne le stockage de valeurs datetime incorrectes dans la base de données et leur récupération en Java.

Pour remédier à cela, l'URL de connexion doit être modifiée pour inclure les paramètres suivants :

  • useTimezone=true : active la prise en charge des fuseaux horaires dans le connexion.
  • serverTimezone=GMT : Spécifie le fuseau horaire du serveur de base de données.

Cependant, cette approche a été remplacée par une solution plus robuste impliquant le utilisation de useLegacyDatetimeCode=false. Ce paramètre désactive l'ancien code de gestion de la date et de l'heure et active le nouveau mécanisme de gestion de l'horodatage dans le connecteur MySQL JDBC.

En définissant useLegacyDatetimeCode=false, le code Java peut spécifier un objet Calendrier lors de la définition des horodatages. . Cet objet Calendar doit être nul, car sa présence entraînerait le formatage des valeurs datetime en fonction du fuseau horaire du serveur Web, introduisant ainsi une confusion.

Pour récupérer correctement les valeurs datetime, le getTimestamp(int) La méthode doit être utilisée sans spécifier d’objet Calendar. Cela garantit que le fuseau horaire de la base de données est exclusivement utilisé pour le formatage.

Il est important de noter que le fuseau horaire du serveur Web n'a plus d'importance avec cette approche. De plus, si MySQL se plaint d'un fuseau horaire de serveur ambigu (par exemple, EST), il peut être explicitement spécifié dans l'URL de connexion en utilisant serverTimezone=.

Cette solution a considérablement amélioré la précision de la gestion de la date et de l'heure lors de l'interface avec les bases de données MySQL à partir d'applications Java.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn