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
Susan Sarandonoriginal
2025-01-03 09:41:40250parcourir

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

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);

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

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!

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