Pokud chcete v MariaDB používat pojmenovaná časová pásma, musíte se ujistit, že jsou nakonfigurována.
„Pojmenovaná časová pásma“ mám na mysli schopnost používat řetězce jako America/Los_Angeles
místo −08:00
nebo −07:00
při zadávání časového pásma. Například při použití CONVERT_TZ()
funkce.
Zde je návod, jak nakonfigurovat pojmenovaná časová pásma v MariaDB.
Tabulky časových pásem
MariaDB má v mysql
následující tabulky časových pásem databáze:
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
Ve výchozím nastavení jsou tyto tabulky vytvořeny, ale nejsou naplněny.
Chcete-li použít pojmenovaná časová pásma, musíte tyto tabulky naplnit. Způsob, jak to provést, bude záviset na vašem systému (tj. zda váš systém skutečně obsahuje informace o časovém pásmu).
Systémy podobné Unixu
Důvod, proč jsou výše uvedené tabulky časových pásem ve výchozím nastavení prázdné, je ten, že je obvykle lepší, aby systém zpracovával časové pásmo, pokud je to možné.
Většina systémů podobných Unixu, jako je Linux, Mac OS X, FreeBSD a Solaris, má databázi zoneinfo. Tuto databázi zoneinfo lze načíst do tabulek časových pásem v MariaDB pomocí mysql_tzinfo_to_sql
utility.
Pokud váš systém obsahuje databázi zoneinfo, je vhodnější použít tuto metodu k naplnění tabulek časových pásem. Jinak můžete způsobit rozdíl ve zpracování data a času mezi MariaDB a jinými aplikacemi ve vašem systému.
Chcete-li načíst tabulky časových pásem, otevřete okno terminálu a spusťte následující:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Zadejte heslo pro root
uživatel. Pokud se zobrazí chyba „přístup odepřen“, podívejte se na tuto opravu.
A je to. Tabulky časových pásem by nyní měly být vyplněny.
V mém případě jsem dostal jedno varování:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Toto varování lze bezpečně ignorovat.
Toto varování je pravděpodobně způsobeno skutečností, že systémy podobné Unixu nezahrnují přestupné sekundy. To znamená, že systémy podobné Unixu nemají žádný způsob, jak reprezentovat skokovou sekundu ve formě 23:59:60
. Místo toho používá stejnou sekundu dvakrát.
To dodržuje standard POSIX (Portable Operating System Interface), který vyžaduje, aby z hlášeného času byly vynechány přestupné sekundy.
Windows, systémy HP-UX
Některé systémy, jako jsou Windows a HP-UX, nemají databázi zoneinfo, takže pokud používáte tyto operační systémy, budete muset načíst tabulky časových pásem pomocí skriptu SQL.
Skripty a pokyny k instalaci najdete v dokumentaci k MySQL.
Zkontrolujte tabulky časových pásem
Jakmile jsou tabulky časových pásem naplněny, můžeme spustit rychlý dotaz, abychom zkontrolovali, že jsou skutečně naplněny.
Příklad:
SELECT *
FROM mysql.time_zone_name
LIMIT 10;
Výsledek:
+--------------------+--------------+ | 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 | +--------------------+--------------+
V tomto případě jsem vybral 10 nejlepších výsledků z time_zone_name
stůl.
Zde je úplný počet:
SELECT COUNT(*)
FROM mysql.time_zone_name;
Výsledek:
+----------+ | COUNT(*) | +----------+ | 594 | +----------+
Ostatní tabulky můžete procházet podle potřeby.