Lavorare con i fusi orari MySQL-MariaDB

Lavorare con i fusi orari MySQL-MariaDB
Per qualsiasi programma, che si tratti di un'app Web, un server API, un software desktop, un tablet o un'app telefonica, lavorare con i fusi orari è un'attività abbastanza comune.

In questo articolo, ti mostrerò come installare i database di fuso orari sul server di database MySQL e MariaDB e usarlo. Ho testato i passaggi mostrati in questo articolo su CentOS 8 e Ubuntu 18.04 LTS. Ma dovrebbe funzionare su CentOS/RHEL 7+, Ubuntu 18.04+ e Debian 10+. Quindi iniziamo.

Prerequisiti:

Devi avere mysql o MariaDB installato sul tuo sistema operativo Linux (i.e. Centos/Rhel, Ubuntu/Debian). Se hai bisogno di assistenza sull'installazione di MySQL/MARIADB, ci sono molti articoli su LinuxHint.com che puoi controllare.

Installazione dei dati del fuso orario su CentOS/RHEL:

In Centos/Rhel, il tzdata Il pacchetto fornisce informazioni fuso orarie. IL tzdata Il pacchetto deve essere installato per impostazione predefinita.

Se in ogni caso, non è installato, è possibile installarlo con i seguenti comandi:

$ sudo dnf makecache
$ sudo dnf Installa tzdata

NOTA: Su CentOS/RHEL 7, usa Yum invece di dnf.

Installazione dei dati del fuso orario su Ubuntu/Debian:

In Ubuntu/Debian, il tzdata Il pacchetto fornisce informazioni fuso orarie. IL tzdata Il pacchetto deve essere installato per impostazione predefinita.

Se in ogni caso, non è installato, è possibile installarlo con i seguenti comandi:

$ sudo apt update
$ sudo apt install tzdata

Convertire i dati del fuso orario in SQL:

I dati del fuso orario dovrebbero essere in /usr/share/zoneinfo/ Directory of Centos/Rhel e Ubuntu/Debian OS.

$ ls/usr/share/zoneinfo/

Come puoi vedere, i dati del fuso orario sono ben disposti in diverse cartelle.

I file di dati del fuso orario sono binari. Non puoi usarli direttamente con i database MySQL/MariaDB.

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

È necessario convertire i dati del fuso orario binario (da /usr/share/zoneinfo/ directory) a SQL usando il mysql_tzinfo_to_sql programma.

Per convertire i dati del fuso orario in SQL, eseguire mysql_tzinfo_to_sql come segue:

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

Un nuovo file zoneinfo.SQL dovrebbe essere creato nella tua home directory. È possibile importare le informazioni di fuso orario nel tuo database MySQL/MARIADB da questo file.

Importazione dei dati del fuso orario su MySQL/MARIADB:

È possibile importare le informazioni di fuso orario da zoneinfo.SQL file nel mysql database come segue:

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

Ora, digita la password di root del database MySQL/MARIADB e premere . Le informazioni del fuso orario devono essere importate.

Impostazione del fuso orario predefinito/globale in MySQL/MARIADB:

Per impostazione predefinita, il fuso orario predefinito/globale di MySQL/MARIADB è impostato sul fuso orario del sistema operativo del sistema operativo. È possibile impostare un fuso orario predefinito/globale diverso se lo desideri.

> Seleziona @@ time_zone;

Innanzitutto, devi trovare il nome del fuso orario che vuoi impostare. Puoi trovare tutti i nomi dei fuso orari disponibili con la seguente istruzione SQL:

> Seleziona il nome da MySQL.time_zone_name;

Puoi anche cercare il nome del fuso orario desiderato come segue:

> Seleziona il nome da MySQL.time_zone_name dove nome come '%%';

Ora puoi impostare il fuso orario desiderato come predefinito/fuso orario globale come segue:

> Imposta Global Time_zone = "";

Il fuso orario desiderato dovrebbe essere impostato come fuso orario predefinito/globale.

> Seleziona @@ time_zone;

Lavorare con i fusi orari in MySQL/MariaDB:

IL Convert_tz () La funzione viene utilizzata per convertire il fuso orario di un DateTime in MySQL/MariaDB.

La sintassi del Convert_tz () La funzione è:

Convert_tz (datetime, from_tz, to_tz)

Qui, da_tz E to_tz Può essere un nome di fuso orario (i.e. Asia/Dhaka, America/New_York) o Offset di fuso orari (i.e. +06:00, -02: 00).

IL appuntamento viene convertito da da_tz A to_tz fuso orario.

È possibile stampare il timestamp corrente (data e ora corrente) del computer con la seguente istruzione SQL:

> Seleziona current_timestamp ();

Ora, diciamo, vuoi convertire il fuso orario della data e dell'ora corrente del tuo computer a Europa/Londra. Per fare ciò, puoi eseguire il Convert_tz () funzione come segue:

> Seleziona current_timestamp () come dt_dhaka, convert_tz (current_timestamp (),
@@ time_zone, 'Europe/London') come dt_london;

Come puoi vedere, il fuso orario dell'attuale DateTime viene convertito in Europa/Londra con successo.

Puoi anche convertire il fuso orario di dati specifici come segue:

> Set @dt = '2001-01-03 11:02:11';
> Seleziona @dt, convert_tz (@dt, "America/Panama", "Europe/London");

Puoi anche convertire il fuso orario dei campi datetime di una tabella. Per dimostrazione, userò una semplice tabella di compleanno in questo articolo.

Innanzitutto, crea un compleanno Tabella come segue:

> Crea compleanno della tabella (nome varchar (20) non null,
nascita_timestamp datetime non null);

IL compleanno La tabella ha solo 2 campi, nome E nascita_timestamp Come puoi vedere nello screenshot qui sotto.

> Descrivi il compleanno;

Ora, inserisci alcuni dati di compleanno fittizio nel compleanno Tabella come segue:

> Inserisci nei valori di compleanno ("Bob", "1997-10-11 12:11:11"),
('Alex', '1987-01-11 01:41:01'), ('Lily', '2001-01-02 20:11:36');

Ecco i dati di compleanno fittizio.

> Seleziona * dal compleanno;

Ora puoi convertire il fuso orario di tutti i timestamp di compleanno a Europa/Londra come segue:

> Seleziona Nome, Birth_Timestamp, convert_tz (BIVY_TIMESTAMP, @@ time_zone,
'Europe/London') come London_birth_timestamp dal compleanno;

Come puoi vedere, i fusi orari di compleanno vengono convertiti correttamente.

Quindi, è fondamentalmente come lavori con i fusi orari MySQL/MariaDB. Grazie per aver letto questo articolo.