Maison > base de données > tutoriel mysql > Comment puis-je gérer correctement les fuseaux horaires lors de la connexion de Java à une base de données MySQL ?

Comment puis-je gérer correctement les fuseaux horaires lors de la connexion de Java à une base de données MySQL ?

Susan Sarandon
Libérer: 2025-01-03 09:41:40
original
340 Les gens l'ont consulté

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

Modification du fuseau horaire MySQL dans les connexions à la base de données Java

MySQL fonctionne avec le fuseau horaire « GMT 8 », tandis que Tomcat utilise « GMT ». Lors de l'enregistrement de datetime dans la base de données, les valeurs peuvent sembler correctes, mais une fois récupérées, les valeurs "GMT" apparaissent. De plus, les valeurs extraites de la base de données sont converties en « GMT », ce qui suggère que la base de données les considère comme « GMT 8 ».

Solution

Le paramètre useTimezone est une solution de contournement obsolète. Pour une solution moderne, définissez useLegacyDatetimeCode=false et effectuez la mise à niveau vers le dernier connecteur MySQL JDBC. Un exemple d'URL de connexion :

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false
Copier après la connexion

Gestion de l'horodatage

Si useLegacyDatetimeCode est défini sur false, la méthode newSetTimestampInternal() est invoquée. Si le calendrier fourni est nul, l'objet date est formaté dans le fuseau horaire de la base de données :

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

Pour récupérer la date, utilisez getTimestamp(int) sans le calendrier. Encore une fois, le fuseau horaire de la base de données sera utilisé pour construire la date.

Non-pertinence du fuseau horaire du serveur Web

Le fuseau horaire du serveur Web n'est désormais plus pertinent pour le formatage. Si useLegacyDatetimecode reste vrai, le fuseau horaire du serveur Web est utilisé, ce qui entraîne une confusion.

Ambiguïté du fuseau horaire MySQL

MySQL peut se plaindre de l'ambiguïté du fuseau horaire du serveur lorsqu'il est défini sur EST, par exemple. Pour résoudre ce problème, spécifiez le fuseau horaire EST exact dans l'URL de connexion :

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York
Copier après la connexion

Ceci n'est nécessaire que si MySQL soulève le problème d'ambiguïté.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal