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.SQLUm 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 -pAgora, 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;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 (),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';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,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'),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,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.