Om du vill använda namngivna tidszoner i MariaDB måste du se till att de har konfigurerats.
Med "namngivna tidszoner" menar jag att kunna använda strängar som America/Los_Angeles
istället för −08:00
eller −07:00
när du anger tidszonen. Till exempel när du använder CONVERT_TZ()
funktion.
Så här konfigurerar du namngivna tidszoner i MariaDB.
Tidszonstabeller
MariaDB har följande tidszonstabeller i mysql
databas:
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
Som standard skapas dessa tabeller, men fylls inte i.
För att använda namngivna tidszoner måste du fylla i dessa tabeller. Metoden för att göra detta beror på ditt system (dvs. om ditt system faktiskt innehåller tidszonsinformation eller inte).
Unix-liknande system
Anledningen till att ovanstående tidszonstabeller är tomma som standard är att det vanligtvis är bättre att systemet hanterar tidszonen, om möjligt.
De flesta Unix-liknande system som Linux, Mac OS X, FreeBSD och Solaris har en zoneinfo-databas. Denna zoninfo-databas kan laddas in i tidszonstabellerna i MariaDB med mysql_tzinfo_to_sql
verktyg.
Om ditt system innehåller en zoneinfo-databas är det att föredra att du använder den här metoden för att fylla i tidszonstabellerna. Annars kan du orsaka en skillnad i datetime-hantering mellan MariaDB och andra applikationer på ditt system.
För att ladda tidszonstabellerna, öppna ett terminalfönster och kör följande:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Ange lösenordet för root
användare. Om du får ett "access denied"-fel, se denna korrigering.
Det är allt. Tidszonstabellerna bör nu fyllas i.
I mitt fall fick jag en varning:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Denna varning kan säkert ignoreras.
Denna varning beror förmodligen på det faktum att Unix-liknande system inte inkluderar skottsekunder. Det vill säga, Unix-liknande system har inget sätt att representera skottsekunden i form av 23:59:60
. Istället använder den bara samma sekund två gånger.
Detta följer standarden POSIX (Portable Operating System Interface) som kräver att skottsekunder utelämnas från den rapporterade tiden.
Windows, HP-UX-system
Vissa system, som Windows och HP-UX, har ingen zoninfodatabas, så du måste ladda tidszonstabellerna via SQL-skript om du använder dessa operativsystem.
Se MySQL-dokumentationen för skript och installationsinstruktioner.
Kontrollera tidszonstabellerna
När tidszonstabellerna har fyllts i kan vi köra en snabb fråga för att kontrollera att de faktiskt är ifyllda.
Exempel:
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 det här fallet valde jag de 10 bästa resultaten från time_zone_name
tabell.
Här är hela räkningen:
SELECT COUNT(*)
FROM mysql.time_zone_name;
Resultat:
+----------+ | COUNT(*) | +----------+ | 594 | +----------+
Du kan gå igenom de andra tabellerna efter behov.