Praca ze strefami czasowymi MySQL-Mariadb

Praca ze strefami czasowymi MySQL-Mariadb
W przypadku każdego programu, niezależnie od tego, czy jest to aplikacja internetowa, serwer API, oprogramowanie komputerowe, tablet lub aplikacja telefoniczna, praca z strefami czasowymi jest dość powszechnym zadaniem.

W tym artykule pokażę Ci, jak zainstalować bazy danych strefy czasowej na serwerze bazy danych MySQL i. Przetestowałem kroki pokazane w tym artykule na Centos 8 i Ubuntu 18.04 LTS. Ale powinien działać na Centos/Rhel 7+, Ubuntu 18.04+ i Debian 10+. Więc zacznijmy.

Wymagania wstępne:

Musisz mieć zainstalowane MySQL lub Mariadb w swoim systemie systemu Linux (i.mi. Centos/Rhel, Ubuntu/Debian). Jeśli potrzebujesz pomocy w instalacji MySQL/MariaDB, na Linuxhint jest wiele artykułów.com, które możesz sprawdzić.

Instalowanie danych stref czasowych na Centos/RHEL:

W Centos/Rhel, tzdata Pakiet zawiera informacje o strefie czasowej. tzdata Pakiet powinien być domyślnie zainstalowany.

Jeśli w każdym razie nie jest zainstalowany, możesz zainstalować go za pomocą następujących poleceń:

$ sudo dnf makeCache
$ sudo dnf instaluj tzdata

NOTATKA: W Centos/Rhel 7, użyj mniam zamiast DNF.

Instalowanie danych stref czasowych na Ubuntu/Debian:

W Ubuntu/Debian, tzdata Pakiet zawiera informacje o strefie czasowej. tzdata Pakiet powinien być domyślnie zainstalowany.

Jeśli w każdym razie nie jest zainstalowany, możesz zainstalować go za pomocą następujących poleceń:

Aktualizacja $ sudo apt
$ sudo apt instal tzdata

Konwersja danych stref czasowych na SQL:

Dane stref czasowych powinny znajdować się w /usr/share/zoneinfo/ Direktory Centos/Rhel i Ubuntu/Debian OS.

$ ls/usr/share/zoneinfo/

Jak widać, dane strefy czasowej są ładnie ułożone w różnych folderach.

Pliki danych strefy czasowej są binarne. Nie możesz ich używać bezpośrednio z bazami danych MySQL/Mariadb.

$ cat/usr/share/zoneinfo/America/Toronto

Musisz przekonwertować dane strefy binarnej (z /usr/share/zoneinfo/ katalog) do SQL za pomocą mysql_tzinfo_to_sql program.

Aby przekonwertować dane strefy czasowej na SQL, uruchom mysql_tzinfo_to_sql następująco:

$ mysql_tzinfo_to_sql/usr/share/zoneinfo/> ~/zoneinfo.SQL

Nowy plik Zoneinfo.SQL powinien być utworzony w katalogu domowym. Możesz zaimportować informacje o strefie czasowej do bazy danych MySQL/MARIADB z tego pliku.

Importowanie danych stref czasowych do MySQL/MARIADB:

Możesz zaimportować informacje o strefie czasowej z Zoneinfo.SQL plik do Mysql baza danych w następujący sposób:

$ cat ~/zoneinfo.SQL | sudo mysql -u root mysql -p

Teraz wpisz swoje hasło do bazy danych mysql/mariadb i naciśnij . Informacje o strefie czasowej powinny być importowane.

Ustawienie domyślnej/globalnej strefy czasowej w MySQL/Mariadb:

Domyślnie domyślna/globalna strefa czasowa MySQL/MARIADB jest ustawiona na strefę czasową OS. Możesz ustawić inną domyślną/globalną strefę czasową, jeśli chcesz.

> Wybierz @@ Time_zone;

Po pierwsze, musisz znaleźć nazwę strefy czasowej, którą chcesz ustawić. Wszystkie dostępne nazwy stref czasowych można znaleźć w następującej instrukcji SQL:

> Wybierz nazwę z MySQL.Time_zone_name;

Możesz także wyszukać żądaną nazwę strefy czasowej w następujący sposób:

> Wybierz nazwę z MySQL.Time_zone_name, gdzie nazwa jak „%%”;

Teraz możesz ustawić żądaną strefę czasową jako domyślną/globalną strefę czasową w następujący sposób:

> Set Global Time_zone = "";

Twoja pożądana strefa czasowa powinna być ustawiona jako domyślna/globalna strefa czasowa.

> Wybierz @@ Time_zone;

Praca ze strefami czasowymi w MySQL/Mariadb:

Convert_tz () Funkcja służy do konwersji strefy czasowej datetime w MySQL/Mariadb.

Składnia Convert_tz () Funkcja to:

Convert_tz (DateTime, from_tz, to_tz)

Tutaj, from_tz I to_tz może być nazwą strefy czasowej (i.mi. Azja/Dhaka, Ameryka/New_York) lub przesunięcie strefy czasowej (i.mi. +06:00, -02: 00).

Datetime jest przekonwertowany z from_tz Do to_tz strefa czasowa.

Możesz wydrukować bieżący znacznik czasu (bieżąca data i godzina) komputera z następującą instrukcją SQL:

> Wybierz current_timestamp ();

Powiedzmy teraz, że chcesz przekonwertować strefę czasową bieżącej daty i godziny komputera na komputer Europa/Londyn. Aby to zrobić, możesz uruchomić Convert_tz () funkcja w następujący sposób:

> Wybierz current_timestamp () jako dt_dhaka, convert_tz (current_timestamp (),
@@ Time_zone, „Europe/London”) jako dt_london;

Jak widać, strefa czasowa bieżącego datetime jest konwertowana na Europa/Londyn z powodzeniem.

Możesz także przekonwertować strefę czasową konkretnego dataTime w następujący sposób:

> Set @dt = '2001-01-03 11:02:11';
> Wybierz @DT, Convert_tz (@dt, „America/Panama”, „Europe/London”);

Możesz także przekonwertować strefę czasową pól datetime tabeli. Do demonstracji użyję prostego stolika urodzinowego w tym artykule.

Najpierw stwórz urodziny Tabela w następujący sposób:

> Utwórz urodziny w tabeli (nazwa varchar (20) nie null,
Birth_timestamp DateTime nie null);

urodziny Tabela ma tylko 2 pola, nazwa I Birth_timestamp Jak widać na zrzucie ekranu poniżej.

> Opisz urodziny;

Teraz wstaw dane urodzinowe do manekina do urodziny Tabela w następujący sposób:

> Wstaw do wartości urodzinowych („Bob”, „1997-10-11 12:11:11”),
(„Alex”, „1987-01-11 01:41:01”), („Lily”, „2001-01-02 20:11:36”);

Oto manekinowe dane urodzinowe.

> Wybierz * z urodzin;

Teraz możesz przekonwertować strefę czasową wszystkich czasopisków urodzinowych na Europa/Londyn następująco:

> Wybierz nazwę, Birth_timestamp, Convert_tz (Birth_timestamp, @@ Time_zone,
„Europa/Londyn”) jako London_birth_timestamp z urodzin;

Jak widać, strefy czasowe urodzinowe są poprawnie konwertowane.

Tak więc w zasadzie tak pracujesz ze strefami czasowymi MySQL/. Dziękujemy za przeczytanie tego artykułu.