MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment configurer des fuseaux horaires nommés dans MariaDB

Si vous souhaitez utiliser des fuseaux horaires nommés dans MariaDB, vous devez vous assurer qu'ils ont été configurés.

Par "fuseaux horaires nommés", je veux dire être capable d'utiliser des chaînes comme America/Los_Angeles au lieu de −08:00 ou −07:00 lors de la spécification du fuseau horaire. Par exemple, lors de l'utilisation de CONVERT_TZ() fonction.

Voici comment configurer des fuseaux horaires nommés dans MariaDB.

Tableaux des fuseaux horaires

MariaDB a les tables de fuseaux horaires suivantes dans le mysql base de données :

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Par défaut, ces tableaux sont créés, mais non renseignés.

Pour utiliser des fuseaux horaires nommés, vous devez remplir ces tables. La méthode pour ce faire dépendra de votre système (c'est-à-dire si votre système contient ou non des informations sur le fuseau horaire).

Systèmes de type Unix

La raison pour laquelle les tables de fuseaux horaires ci-dessus sont vides par défaut est qu'il est généralement préférable que le système gère le fuseau horaire, si possible.

La plupart des systèmes de type Unix tels que Linux, Mac OS X, FreeBSD et Solaris ont une base de données zoneinfo. Cette base de données zoneinfo peut être chargée dans les tables de fuseaux horaires de MariaDB avec le mysql_tzinfo_to_sql utilitaire.

Si votre système contient une base de données zoneinfo, il est préférable d'utiliser cette méthode pour remplir les tables de fuseaux horaires. Sinon, vous risquez de provoquer une différence dans la gestion de la date et de l'heure entre MariaDB et les autres applications de votre système.

Pour charger les tables de fuseaux horaires, ouvrez une fenêtre de terminal et exécutez la commande suivante :

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Entrez le mot de passe pour le root utilisateur. Si vous obtenez une erreur "accès refusé", consultez ce correctif.

C'est ça. Les tables de fuseaux horaires devraient maintenant être remplies.

Dans mon cas, j'ai reçu un avertissement :

Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.

Cet avertissement peut être ignoré en toute sécurité.

Cet avertissement est probablement dû au fait que les systèmes de type Unix n'incluent pas les secondes intercalaires. Autrement dit, les systèmes de type Unix n'ont aucun moyen de représenter la seconde intercalaire sous la forme de 23:59:60 . Au lieu de cela, il utilise simplement la même seconde deux fois.

Cela respecte la norme POSIX (Portable Operating System Interface), qui exige que les secondes intercalaires soient omises de l'heure indiquée.

Windows, systèmes HP-UX

Certains systèmes, tels que Windows et HP-UX, n'ont pas de base de données zoneinfo. Vous devrez donc charger les tables de fuseaux horaires via un script SQL si vous utilisez ces systèmes d'exploitation.

Consultez la documentation MySQL pour les scripts et les instructions d'installation.

Vérifiez les tableaux des fuseaux horaires

Une fois les tables de fuseaux horaires remplies, nous pouvons exécuter une requête rapide pour vérifier qu'elles sont bien remplies.

Exemple :

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Résultat :

+--------------------+--------------+
| Name               | Time_zone_id |
+--------------------+--------------+
| Africa/Abidjan     |            1 |
| Africa/Accra       |            2 |
| Africa/Addis_Ababa |            3 |
| Africa/Algiers     |            4 |
| Africa/Asmara      |            5 |
| Africa/Asmera      |            6 |
| Africa/Bamako      |            7 |
| Africa/Bangui      |            8 |
| Africa/Banjul      |            9 |
| Africa/Bissau      |           10 |
+--------------------+--------------+

Dans ce cas, j'ai sélectionné les 10 meilleurs résultats du time_zone_name table.

Voici le décompte complet :

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Résultat :

+----------+
| COUNT(*) |
+----------+
|      594 |
+----------+

Vous pouvez parcourir les autres tables si nécessaire.