Campo tipo TIMESTAMP com data e hora correta no MySQL

Uma prática comum, e diria salutar, é termos em algumas de nossas tabelas, um campo do tipo timestamp onde podemos armazenar o horário e o dia em que aquele registro foi inserido nesta tabela. Isso é útil para várias situações, desde auditoria a cálculo estatísticos.

Para preencher esse campo, por padrão, utilizamos na query INSERT ou UPDATE o padrão CURRENT_TIMESTAMP para que seja inserido no campo determinado daquele registro, o valor “DATA HORA” capturado do servidor naquele exato momento.

Data e hora correta com Timestamp

Porém é sabido que servidores possuem a data local e a data GMT/UTC, o que muitas vezes, mesmo tendo já atualizado a hora de nosso servidor, nos deparamos com um horário diferente do que esperávamos em nossos registros no banco de dados.

Veja na imagem abaixo, um exemplo:

Registro de data e hora em Banco de Dados Mysql

Bem, caso você esteja nessa situação, e precise garantir que a data registrada no campo tipo timestamp em seu BD seja a data e hora local de sua região, é necessário utilizar o parametro ‘timezone’ no arquivo my.cnf que é responsável pela configuração do MySQL em seu servidor.

Voto dos leitores: 4.5 (2 votos)
Sending

Edite o arquivo, localizado no diretório /etc/ e localize a seção ‘mysqld_safe‘ e faça a alteração da linha do parametro ‘timezone’ ou, caso não exista essa linha, insira-a.

Veja um exemplo:

[mysqld_safe]
timezone = Brazil/East

Para saber qual a sua zona correta, localize no seu servidor usando o comando: “ls /usr/share/zoneinfo/“.

Serão listadas todas as zonas e você deve testar para saber qual é a que se aplica à sua região. Das opções que foram apresentadas, fiz a opção por ‘Brazil/East’ e para testar, utilizei o comando: “TZ=’Brazil/East’ date” no prompt do linux, cuja saída é: “Dom Mar 22 08:45:04 BRT 2015″.

Por curiosidade, caso queira verificar a data UTC, digite no prompt o comando “date -u” e então verá o horário UTC e poderá comparar com a hora utilizando sua timezone escolhida (TZ).

Após identificar qual a sua zona, e executar essa alteração no arquivo my.cnf, é preciso reiniciar o serviço Mysql (/etc/init.d/mysqld restart).

Pronto. Execute o comando em seu BD e verifique que a data e hora do seu registro será exibida, corretamente no campo do tipo timestamp.

 

OBS.: como na maioria das dicas deste blog e feitas por este autor, essa dica foi testada em um servidor com sistema operacional Linux distribuição RHEL com banco de dados MySQL.

 

 

Siga-me

Claudio Eden

Profissional da área de Tecnologia da Informação desde 1986, graduado em Gestão de TI, graduando em Análise e Desenvolvimento de Sistemas e cursando especialização em Engenharia e Arquitetura de Software.

Sólidos conhecimentos em infra-estrutura de TIC e Service Desk. Larga experiência em gerenciamento de equipes e contratos, Aderência aos princípios de governança de TIC. Conhecimento dos padrões e melhores práticas de mercado para TIC baseado em ITIL.

Atuando oficialmente com Asterisk desde 2010, gerenciou a plataforma em Contact Center com grande volume de ligações e desenvolveu um projeto cuja base é o Asterisk.
Siga-me