Maison > base de données > tutoriel mysql > Comment puis-je dépanner la fonction CONVERT_TZ() de MySQL pour des conversions précises de fuseau horaire ?

Comment puis-je dépanner la fonction CONVERT_TZ() de MySQL pour des conversions précises de fuseau horaire ?

Barbara Streisand
Libérer: 2024-11-29 17:44:11
original
392 Les gens l'ont consulté

How Can I Troubleshoot MySQL's CONVERT_TZ() Function for Accurate Time Zone Conversions?

Problèmes MySQL CONVERT_TZ()

Lorsque vous travaillez avec des fuseaux horaires dans une base de données, en particulier avec l'heure d'été (DST), il est crucial de assurer des conversions précises. Voici quelques problèmes et leurs solutions concernant la fonction MySQL CONVERT_TZ() :

Q1. Précision des noms de fuseaux horaires

Oui, vous avez raison. La spécification de noms de fuseau horaire tels que « US/Eastern » devrait automatiquement tenir compte de l'heure d'été. CONVERT_TZ('00:00:00', 'UTC', 'US/Eastern') devrait en effet donner des résultats différents pour le 1er janvier et le 1er juillet en raison de l'heure d'été.

Q2. Mise à jour des tables de fuseaux horaires

MySQL utilise un ensemble de tables de fuseaux horaires pour déterminer les décalages actuels pour différents fuseaux horaires. Si vous n'utilisez pas les dernières versions de ces tables, la fonction CONVERT_TZ() risque de ne pas fonctionner correctement. Vous pouvez vérifier si les tables de fuseaux horaires sont à jour en exécutant la requête suivante :

SELECT VERSION() FROM mysql.time_zone_name;
Copier après la connexion

Si la sortie affiche un numéro de version inférieur à « 2018h », vous devez mettre à jour les tables en exécutant la commande commande suivante :

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql
Copier après la connexion

Q3. Résultat "NULL" de CONVERT_TZ()

Le résultat "NULL" que vous avez rencontré pourrait indiquer que les tables de fuseaux horaires ne sont pas correctement installées ou initialisées. Pour le vérifier, exécutez la requête suivante :

SELECT COUNT(*) FROM mysql.time_zone;
Copier après la connexion

Si le résultat est 0, cela signifie que les tables de fuseaux horaires sont vides. Dans ce cas, vous pouvez les installer à l'aide de la commande mentionnée ci-dessus.

Solution alternative

Bien que CONVERT_TZ() soit généralement une solution fiable pour les conversions de fuseau horaire, il existe une approche alternative qui élimine le besoin de tables de fuseaux horaires. Vous pouvez stocker le décalage horaire de l'utilisateur par rapport à UTC en heures et utiliser la requête suivante pour convertir l'heure UTC en heure locale de l'utilisateur :

SELECT UTC_TIMESTAMP() + INTERVAL user_timezone_offset_in_hours HOUR;
Copier après la connexion

Cette méthode ne nécessite pas de tables de fuseaux horaires et est relativement simple à mettre en œuvre. .

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