sql >> Database teknologi >  >> RDS >> MariaDB

Sådan opsætter du navngivne tidszoner i MariaDB

Hvis du vil bruge navngivne tidszoner i MariaDB, skal du sørge for, at de er blevet konfigureret.

Med "navngivne tidszoner" mener jeg at kunne bruge strenge som America/Los_Angeles i stedet for −08:00 eller −07:00 når du angiver tidszonen. For eksempel, når du bruger CONVERT_TZ() funktion.

Sådan konfigurerer du navngivne tidszoner i MariaDB.

Tidszonetabeller

MariaDB har følgende tidszonetabeller i mysql database:

  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Som standard er disse tabeller oprettet, men ikke udfyldt.

For at bruge navngivne tidszoner skal du udfylde disse tabeller. Metoden til at gøre dette vil afhænge af dit system (dvs. om dit system faktisk indeholder tidszoneoplysninger eller ej).

Unix-lignende systemer

Grunden til, at ovenstående tidszonetabeller er tomme som standard, er, at det normalt er bedre, at systemet håndterer tidszonen, hvis det er muligt.

De fleste Unix-lignende systemer som Linux, Mac OS X, FreeBSD og Solaris har en zoneinfo-database. Denne zoneinfo-database kan indlæses i tidszonetabellerne i MariaDB med mysql_tzinfo_to_sql værktøj.

Hvis dit system indeholder en zoneinfo-database, er det at foretrække, at du bruger denne metode til at udfylde tidszonetabellerne. Ellers kan du forårsage en forskel i håndtering af dato og klokkeslæt mellem MariaDB og andre applikationer på dit system.

For at indlæse tidszonetabellerne skal du åbne et terminalvindue og køre følgende:

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

Indtast adgangskoden til root bruger. Hvis du får en "adgang nægtet"-fejl, skal du se denne rettelse.

Det er det. Tidszonetabellerne skulle nu være udfyldt.

I mit tilfælde fik jeg en advarsel:

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

Denne advarsel kan sikkert ignoreres.

Denne advarsel skyldes sandsynligvis det faktum, at Unix-lignende systemer ikke inkluderer springsekunder. Det vil sige, at Unix-lignende systemer ikke kan repræsentere springsekundet i form af 23:59:60 . I stedet bruger den bare det samme sekund to gange.

Dette overholder POSIX-standarden (Portable Operating System Interface), som kræver, at skudsekunder udelades fra rapporteret tidspunkt.

Windows, HP-UX-systemer

Nogle systemer, såsom Windows og HP-UX, har ikke en zoneinfo-database, så du bliver nødt til at indlæse tidszonetabellerne via SQL-script, hvis du bruger disse operativsystemer.

Se MySQL-dokumentationen for scripts og installationsinstruktioner.

Tjek tidszonetabellerne

Når tidszonetabellerne er blevet udfyldt, kan vi køre en hurtig forespørgsel for at kontrollere, at de faktisk er udfyldt.

Eksempel:

SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Resultat:

+--------------------+--------------+
| 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 |
+--------------------+--------------+

I dette tilfælde valgte jeg de 10 bedste resultater fra time_zone_name bord.

Her er hele optællingen:

SELECT COUNT(*) 
FROM mysql.time_zone_name;

Resultat:

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

Du kan køre gennem de andre tabeller efter behov.


  1. Hvordan returnerer jeg tilfældige tal som en kolonne i SQL Server 2005?

  2. Kod din første API med Node.js og Express:Tilslut en database

  3. Vis udvalgte resultater lodret i psql, som det gøres af MySQL's \G

  4. Indsamlingstider for Spotlight Cloud Alarmer