Trabalhando com fusos horários do MySQL-Mariadb

Trabalhando com fusos horários do MySQL-Mariadb
Para qualquer programa, seja um aplicativo da web, servidor de API, software de desktop, tablet ou aplicativo de telefone, trabalhar com os fusos horários é uma tarefa bastante comum.

Neste artigo, vou mostrar como instalar bancos de dados de fuso horário no servidor de banco de dados MySQL e Mariadb e usá -lo. Eu testei as etapas mostradas neste artigo sobre o CentOS 8 e Ubuntu 18.04 LTS. Mas deve funcionar no CentOS/Rhel 7+, Ubuntu 18.04+ e Debian 10+. Então vamos começar.

Pré -requisitos:

Você deve ter MySQL ou MariaDB instalado no seu sistema operacional Linux (i.e. CENTOS/RHEL, Ubuntu/Debian). Se você precisar de assistência na instalação do MySQL/Mariadb, existem muitos artigos no Linuxhint.com que você pode verificar.

Instalando os dados do fuso horário no CentOS/RHEL:

Em Centos/Rhel, o tzdata O pacote fornece informações sobre fuso horário. O tzdata o pacote deve ser instalado por padrão.

Se, em algum momento, não estiver instalado, você pode instalá -lo com os seguintes comandos:

$ sudo dnf makecache
$ sudo dnf install tzdata

OBSERVAÇÃO: No CentOS/Rhel 7, use yum em vez de DNF.

Instalando os dados do fuso horário no Ubuntu/Debian:

Em Ubuntu/Debian, o tzdata O pacote fornece informações sobre fuso horário. O tzdata o pacote deve ser instalado por padrão.

Se, em algum momento, não estiver instalado, você pode instalá -lo com os seguintes comandos:

$ sudo apt update
$ sudo apt install tzdata

Convertendo dados do fuso horário em SQL:

Os dados do fuso horário devem estar no /usr/share/zoneInfo/ Diretório de Centos/Rhel e Ubuntu/Debian OS.

$ ls/usr/share/zoneInfo/

Como você pode ver, os dados do fuso horário são bem organizados em diferentes pastas.

Os arquivos de dados do fuso horário são binários. Você não pode usá -los diretamente com bancos de dados MySQL/Mariadb.

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

Você deve converter os dados binários do fuso horário (a partir do /usr/share/zoneInfo/ diretório) para SQL usando o mysql_tzinfo_to_sql programa.

Para converter os dados do fuso horário em SQL, execute mysql_tzinfo_to_sql do seguinte modo:

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

Um novo arquivo zoneInfo.SQL deve ser criado em seu diretório doméstico. Você pode importar as informações do fuso horário para o seu banco de dados MYSQL/MARIADB deste arquivo.

Importando dados de fuso horário para MySQL/Mariadb:

Você pode importar as informações do fuso horário do zoneInfo.SQL Arquive no mysql Banco de dados da seguinte forma:

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

Agora, digite seu banco de dados MySQL/Mariadb senha root e pressione . As informações do fuso horário devem ser importadas.

Definir fuso horário padrão/global em MySQL/Mariadb:

Por padrão, o fuso horário padrão/global do MySQL/Mariadb é definido para o fuso horário do sistema operacional. Você pode definir um fuso horário padrão/global diferente se quiser.

> Selecione @@ time_zone;

Primeiro, você precisa encontrar o nome do fuso horário que deseja definir. Você pode encontrar todos os nomes de fuso horário disponíveis com a seguinte instrução SQL:

> Selecione o nome do MySQL.time_zone_name;

Você também pode procurar o nome do fuso horário desejado da seguinte maneira:

> Selecione o nome do MySQL.time_zone_name onde nome como '%%';

Agora, você pode definir o fuso horário desejado como um fuso horário padrão/global da seguinte forma:

> Definir global time_zone = "";

O fuso horário desejado deve ser definido como Fuso horário padrão/global.

> Selecione @@ time_zone;

Trabalhando com fusos horários em MySQL/Mariadb:

O Convert_tz () A função é usada para converter o fuso horário de um datetime em MySQL/Mariadb.

A sintaxe do Convert_tz () função é:

Convert_tz (DateTime, frhtz, para_tz)

Aqui, de_tz e to_tz pode ser um nome de zona horário (eu.e. Ásia/Dhaka, America/New_york) ou deslocamento de fuso horário (I.e. +06:00, -02: 00).

O data hora é convertido de de_tz para to_tz fuso horário.

Você pode imprimir o registro atual (data e hora atual) do seu computador com a seguinte instrução SQL:

> Selecione current_timestamp ();

Agora, digamos, você deseja converter o fuso horário da data e hora atuais do seu computador para Europa/Londres. Para fazer isso, você pode executar o Convert_tz () função da seguinte forma:

> Selecione current_timestamp () como dt_dhaka, convert_tz (current_timestamp (),
@@ Time_Zone, 'Europa/Londres') como DT_LONDON;

Como você pode ver, o fuso horário da data atual é convertido para Europa/Londres com sucesso.

Você também pode converter fuso horário de DateTime específico da seguinte maneira:

> Set @dt = '2001-01-03 11:02:11';
> Selecione @dt, convert_tz (@dt, 'America/PanamA', 'Europa/Londres');

Você também pode converter o fuso horário dos campos de tempo de dados de uma tabela. Para demonstração, usarei uma tabela de aniversário simples neste artigo.

Primeiro, crie um aniversário Tabela da seguinte maneira:

> Crie aniversário de aniversário (nome Varchar (20) não nulo,
BIORH_TIMESTAMP DATETIME NÃO NULL);

O aniversário A tabela tem apenas 2 campos, nome e BIORH_TIMESTAMP Como você pode ver na captura de tela abaixo.

> Descreva o aniversário;

Agora, insira alguns dados de aniversário fictícia no aniversário Tabela da seguinte maneira:

> Inserir em valores de aniversário ('Bob', '1997-10-11 12:11:11'),
('Alex', '1987-01-11 01:41:01'), ('Lily', '2001-01-02 20:11:36');

Aqui estão os dados de aniversário fictícia.

> Selecione * no aniversário;

Agora, você pode converter o fuso horário de todos os registros de data e hora para Europa/Londres do seguinte modo:

> Selecione Nome, BIRth_Timestamp, Convert_TZ (BIORH_TIMESTAMP, @@ Time_Zone,
'Europa/Londres') como Londres_birth_timestamp do aniversário;

Como você pode ver, os fusos horários de aniversário são convertidos corretamente.

Então, é basicamente assim que você trabalha com fusos horários do MySQL/Mariadb. Obrigado por ler este artigo.