Do not speak Portuguese? Translate this site with Google or Bing Translator
Como ajustar o fuso horário ou timezone no MySQL

Posted on: July 07, 2020 11:20 AM

Posted by: Renato

Categories: mysql

Views: 2243

Como ajustar o fuso horário ou timezone no MySQL

O MySQL vai usar as datas e horas do sistema, caso não seja instruído a proceder de outra maneira. Se você estiver rodando um aplicativo cliente em uma zona com fuso horário diferente do do servidor MySQL, pode alterar manualmente a hora, com a função DATE_ADD().
Linguagens de script, como PHP, Python ou Perl, têm suas próprias funções para ajustar o fuso horário no cliente.
Neste artigo vamos abordar uma técnica manual, que pode ser útil para resolver o problema rapidamente e outras voltadas para quem deseja “resolver e esquecer” — ou seja, usar uma solução definitiva.

O sistema operacional, sobre o qual o servidor MySQL está rodando, afeta os valores usados pelo banco de dados — se seu fuso horário estiver ajustado para SYSTEM. Neste caso, o ajuste pode ser feito no sistema operacional.
Se você substituir o arquivo de sistema de definição de fuso horário, /etc/localtime por outro que tenha regras diferentes, será necessário reiniciar o mysqld para que suas informações sejam atualizadas no servidor MySQL.

fusos horários - mysql

Ajuste o fuso horário com DATE_ADD()

Esta pode ser uma forma rápida de obter uma solução — em que basta adicionar ou deduzir a quantidade de horas necessárias para obter o valor de data/hora correto.
Veja como acrescentar 2 horas a todos os horários de uma coluna em uma tabela (CadastroClientes):

SELECT NomeCliente AS Cliente,
    ->  TIME(DataCadastroCliente) AS "Check in time",
    ->  TIME(DATE_ADD(DataCadastroCliente, INTERVAL +2 HOUR)) AS "Hora local do Check in"
    ->  FROM CadastroClientes LIMIT 10;
+--------------------+---------------+------------------------+
| Cliente            | Check in time | Hora local do Check in |
+--------------------+---------------+------------------------+
| Christen Wiggins   | 10:03:39      | 12:03:39               |
| Justine Howard     | 21:44:49      | 23:44:49               |
| Brenda Ellis       | 11:58:30      | 13:58:30               |
| Hayfa Mendoza      | 20:52:29      | 22:52:29               |
| Kylie Mckay        | 09:43:57      | 11:43:57               |
| Fredericka Fuller  | 15:33:51      | 17:33:51               |
| Gretchen Bartlett  | 17:02:54      | 19:02:54               |
| Fiona Chen         | 20:28:20      | 22:28:20               |
| Lacy Holland       | 02:00:29      | 04:00:29               |
| Karleigh Contreras | 01:06:55      | 03:06:55               |
+--------------------+---------------+------------------------+
10 rows in set (0.00 sec)

O artigo Como converter horas em segundos minutos e dias aborda a função TIME() e dá outros exemplos de operações aritméticas envolvendo as horas.
Esta abordagem não é a melhor, quando a carga de serviço é grande. Além disso, fazer “trabalho manual e repetitivo” vai contra a nossa cultura hacker
Veja, nos próximos tópicos, algumas formas de solucionar o problema mais eficientemente.

Ajuste a variável time_zone de fuso horário no MySQL

 

Captura de tela - MySQL set global time_zone
Clique para ver detalhes.


A variável time_zone pode ser ajustada direto no console do cliente MySQL.
Verifique a sua hora atual com a função NOW(), antes de começar a brincar:

 

SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2015-07-02 19:37:57 |
+---------------------+
1 row in set (0.01 sec)

Em seguida, altere a variável global de fuso horário e desconecte do servidor:

SET @@global.time_zone = '+3:00';
QUIT

Você precisa sair e entrar de novo na sua sessão MySQL para poder ver os efeitos.
Assim que reiniciar a sessão do MySQL, verifique novamente a hora atual:

SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2015-07-02 22:38:29 |
+---------------------+
1 row in set (0.00 sec)

Se você tiver o banco de dados de nomes de zonas de fusos horários adequadamente configurado, pode se referir às zonas pelos seus nomes. Veja um exemplo:

SET time_zone='America/Sao_Paulo';
Query OK, 0 rows affected (0.01 sec)
SELECT @@time_zone;
+-------------------+
| @@time_zone       |
+-------------------+
| America/Sao_Paulo |
+-------------------+
1 row in set (0.00 sec)

Para poder se referir a um nome de zona de fuso horário, como ‘Brazil/DeNoronha’, você precisa estar com o banco de dados de nomes de timezones corretamente configurado. Se você tiver dúvidas sobre este assunto, ou não estiver conseguindo usar os nomes das zonas de fusos, leia este artigo.
Para ver todos os fusos válidos para o Brazil, por exemplo, use a seguinte query:

SELECT * FROM mysql.time_zone_name WHERE Name LIKE '%Brazil%';
+------------------------+--------------+
| Name                   | Time_zone_id |
+------------------------+--------------+
| Brazil/Acre            |          360 |
| Brazil/DeNoronha       |          361 |
| Brazil/East            |          362 |
| Brazil/West            |          363 |
| posix/Brazil/Acre      |          957 |
| posix/Brazil/DeNoronha |          958 |
| posix/Brazil/East      |          959 |
| posix/Brazil/West      |          960 |
| right/Brazil/Acre      |         1554 |
| right/Brazil/DeNoronha |         1555 |
| right/Brazil/East      |         1556 |
| right/Brazil/West      |         1557 |
+------------------------+--------------+
12 rows in set (0.00 sec)

Ajuste o arquivo de configuração my.cnf

Você pode selecionar um fuso horário pro servidor MySQL diferente do usado pelo sistema no qual ele se encontra instalado. Para isto, indique o fuso horário desejado, dentro do arquivo /etc/mysql/my.cnf, sob a variável default-time-zone.
Veja um exemplo:

[mysqld]
default-time-zone = Europe/Lisbon

Para que o comando acima funcione adequadamente, é necessário que as tabelas de timezones estejam completas e preenchidas.
Há outros valores, para quem se encontra em país de língua portuguesa:

  • Africa/Luanda
  • America/Campo_Grande
  • America/Bahia
  • America/Belem
  • America/Boa_Vista
  • America/Cuiaba
  • America/Fortaleza
  • America/Manaus — Brazil/West
  • America/Noronha — Brazil/DeNoronha
  • America/Porto_Acre — Brazil/Acre
  • America/Porto_Velho
  • America/Recife
  • America/Rio_Branco — Brazil/Rio_Branco
  • America/Santarem
  • America/Sao_Paulo — Brazil/East
  • Brazil/Acre
  • Brazil/DeNoronha
  • Brazil/East
  • Brazil/Rio_Branco
  • Brazil/West
  • Athlantic/Cape_Verde

Se você usa Ubuntu ou outra distro GNU/Linux baseada no Debian, pode encontrar uma relação completa de zonas de fusos horários em /usr/share/zoneinfo.
Depois de alterar o arquivo my.cnf, reinicie o servidor MySQL:

sudo service mysql stop
sudo service mysql start
 
mysql start/running, process 11885

Entre novamente no cliente MySQL e verifique o seu novo fuso horário:

NOW();

ou

select @@time_zone;
+------------------+
| @@time_zone      |
+------------------+
| Europe/Stockholm |
+------------------+
1 row in set (0.00 sec)

Como você pode perceber, no exemplo acima, alterei o fuso horário para o de Estocolmo (Suécia).
Quando você cansar de brincar, basta remover (ou comentar, com um ‘#’) a referência ao fuso horário no arquivo my.cnf e reiniciar o servidor MySQL — e este voltará a usar o fuso horário do sistema:

select @@time_zone;
+-------------+
| @@time_zone |
+-------------+
| SYSTEM      |
+-------------+

Referẽncias:
https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
http://stackoverflow.com/questions/930900/how-to-set-time-zone-of-mysql


2

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 1 Comments
  • Renato de Oliveira Lucena
    Renato de Oliveira Lucena - há 3 anos
    ## Mais /etc/mysql/my.cnf or C:\ProgramData\MySQL\MySQL Server 5.6\my.ini - America/Recife - America/Sao_Paulo — Brazil/East > default-time-zone=America/Sao_Paulo

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1)

New Articles



Get Latest Updates by Email