MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como configurar fusos horários nomeados no MariaDB


Se você quiser usar fusos horários nomeados no MariaDB, precisará verificar se eles foram configurados.

Por “fusos horários nomeados”, quero dizer poder usar strings como America/Los_Angeles em vez de −08:00 ou −07:00 ao especificar o fuso horário. Por exemplo, ao usar o CONVERT_TZ() função.

Veja como configurar fusos horários nomeados no MariaDB.

Tabelas de fuso horário


MariaDB tem as seguintes tabelas de fuso horário no mysql base de dados:
  • time_zone
  • time_zone_leap_second
  • time_zone_name
  • time_zone_transition
  • time_zone_transition_type

Por padrão, essas tabelas são criadas, mas não preenchidas.

Para usar fusos horários nomeados, você precisa preencher essas tabelas. O método para fazer isso dependerá do seu sistema (ou seja, se o seu sistema realmente contém informações de fuso horário).

Sistemas do tipo Unix


A razão pela qual as tabelas de fuso horário acima estão vazias por padrão é porque geralmente é melhor que o sistema lide com o fuso horário, se possível.

A maioria dos sistemas do tipo Unix, como Linux, Mac OS X, FreeBSD e Solaris, tem um banco de dados zoneinfo. Este banco de dados zoneinfo pode ser carregado nas tabelas de fuso horário no MariaDB com o mysql_tzinfo_to_sql Utilitário.

Se o seu sistema contém um banco de dados zoneinfo, é preferível que você use esse método para preencher as tabelas de fuso horário. Caso contrário, você pode causar uma diferença no tratamento de data e hora entre o MariaDB e outros aplicativos em seu sistema.

Para carregar as tabelas de fuso horário, abra uma janela de terminal e execute o seguinte:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Digite a senha para a root do utilizador. Se você receber um erro de “acesso negado”, consulte esta correção.

É isso. As tabelas de fuso horário agora devem ser preenchidas.

No meu caso, recebi um aviso:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.

Este aviso pode ser ignorado com segurança.

Este aviso é provavelmente devido ao fato de que sistemas do tipo Unix não incluem segundos bissextos. Ou seja, sistemas do tipo Unix não têm como representar o segundo bissexto na forma de 23:59:60 . Em vez disso, apenas usa o mesmo segundo duas vezes.

Isso segue o padrão POSIX (Portable Operating System Interface), que exige que os segundos bissextos sejam omitidos do tempo relatado.

Windows, sistemas HP-UX


Alguns sistemas, como Windows e HP-UX, não possuem um banco de dados zoneinfo, portanto, você precisará carregar as tabelas de fuso horário via script SQL se estiver usando esses sistemas operacionais.

Consulte a documentação do MySQL para os scripts e instruções de instalação.

Verifique as tabelas de fuso horário


Depois que as tabelas de fuso horário forem preenchidas, podemos executar uma consulta rápida para verificar se elas estão de fato preenchidas.

Exemplo:
SELECT * 
FROM mysql.time_zone_name
LIMIT 10;

Resultado:
+--------------------+--------------+
| 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 |
+--------------------+--------------+

Nesse caso, selecionei os 10 principais resultados do time_zone_name tabela.

Aqui está a contagem completa:
SELECT COUNT(*) 
FROM mysql.time_zone_name;

Resultado:
+----------+
| COUNT(*) |
+----------+
|      594 |
+----------+

Você pode percorrer as outras tabelas conforme necessário.