Ако искате да използвате наименувани часови зони в MariaDB, ще трябва да се уверите, че са конфигурирани.
Под „именувани часови зони“ имам предвид възможността да използвате низове като America/Los_Angeles
вместо −08:00
или −07:00
при определяне на часовата зона. Например, когато използвате CONVERT_TZ()
функция.
Ето как да конфигурирате наименувани часови зони в MariaDB.
Таблици с часовите зони
MariaDB има следните таблици с часови зони в mysql
база данни:
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
По подразбиране тези таблици се създават, но не се попълват.
За да използвате наименувани часови зони, трябва да попълните тези таблици. Методът за това ще зависи от вашата система (т.е. дали вашата система всъщност съдържа информация за часовата зона или не).
Системи, подобни на Unix
Причината, поради която горните таблици с часовите зони са празни по подразбиране, е, че обикновено е по-добре системата да обработва часовата зона, ако е възможно.
Повечето подобни на Unix системи като Linux, Mac OS X, FreeBSD и Solaris имат база данни zoneinfo. Тази база данни за zoneinfo може да бъде заредена в таблиците с часовите зони в MariaDB с mysql_tzinfo_to_sql
полезност.
Ако вашата система съдържа база данни за zoneinfo, за предпочитане е да използвате този метод за попълване на таблиците с часовите зони. В противен случай може да предизвикате разлика в обработката на дата и час между MariaDB и други приложения във вашата система.
За да заредите таблиците с часовите зони, отворете прозорец на терминала и изпълнете следното:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Въведете паролата за root
потребител. Ако получите грешка „отказан достъп“, вижте тази корекция.
Това е. Таблиците с часовите зони трябва да бъдат попълнени.
В моя случай получих едно предупреждение:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Това предупреждение може безопасно да бъде игнорирано.
Това предупреждение вероятно се дължи на факта, че Unix-подобните системи не включват високосни секунди. Тоест, Unix-подобните системи нямат начин да представят високосната секунда под формата на 23:59:60
. Вместо това просто използва една и съща секунда два пъти.
Това се придържа към стандарта POSIX (интерфейс на портативна операционна система), който изисква високосните секунди да бъдат пропуснати от отчетеното време.
Windows, HP-UX системи
Някои системи, като Windows и HP-UX, нямат база данни за zoneinfo, така че ще трябва да заредите таблиците с часовите зони чрез SQL скрипт, ако използвате тези операционни системи.
Вижте документацията на MySQL за скриптовете и инструкциите за инсталиране.
Проверете таблиците с часовите зони
След като таблиците с часовите зони бъдат попълнени, можем да изпълним бърза заявка, за да проверим дали те всъщност са попълнени.
Пример:
SELECT *
FROM mysql.time_zone_name
LIMIT 10;
Резултат:
+--------------------+--------------+ | 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 | +--------------------+--------------+
В този случай избрах първите 10 резултата от time_zone_name
маса.
Ето пълния брой:
SELECT COUNT(*)
FROM mysql.time_zone_name;
Резултат:
+----------+ | COUNT(*) | +----------+ | 594 | +----------+
Можете да преминете през другите таблици според нуждите.