Tipos de Data e Hora no MySQL

Data e Hora no MySQL

Existem cinco tipo tipos que permitem armazenar informações sobre tempo (data e hora) no MySQL. São eles: DATE, TIME, DATETIME, TIMESTAMP e YEAR.

No geral, usamos o tipo TIMESTAMP pra armazenar informação sobre o momento em que um registro é inserido ou atualizado na tabela. Sempre que uma coluna do tipo TIMESTAMP é alterada, a hora e data atuais são armazenadas, automaticamente.

Para armazenar outras datas comuns, como por exemplo a data de nascimento de uma pessoa, devemos usar o tipo DATETIME ou ainda o tipo DATE, se a informação de horário não for importante.

O tipo TIMESTAMP possui um problema: só é possível armazenar datas até o ano 2038. Esse é o “problema do ano 2K38” ou ainda “Bug do Milênio do Unix“. caso seja necessário armazenar datas além desse ano, deve-se obrigatoriamente usar o tipo DATETIME – lembrando que esse tipo ocupa o dobro do espaço do TIMESTAMP.

A tabela a seguir mostra os tipos de data e hora no MySQL com informações sobre cada um:

Tipo Tam. Bytes Descrição
DATE 3 Datas entre 01/Jan/1000 até 31/Dez/9999. Formato padrão: “aaaa-mm-dd”
TIME 3 Horas na faixa entre -838:59:59 até 838:59:59. Formato padrão: “hh;mm:ss”
DATETIME 8 Combinação de data e hora. Faixa de 01/Jan/1970 até 31/Dez/9999. Formato padrão: “aaaa-mm-dd hh:mm:ss”.
TIMESTAMP 4 Combinação de data e hora. Faixa de 01/Jan/1970 até o ano 2037. Formato padrão: “aaaa-mm-dd hh:mm:ss”.
YEAR[(2|4)] 1 Ano nos formatos de 2 ou 4 dígitos. O padrão é ano com quatro dígitos, com valores permissíveis de 1901 a 2155. Já no formato de 2 dígitos, o intervalo aceito é de (19)70 até (20)69.

Exemplos

Vejamos um exemplo do emprego de tipos de data e hora em MySQL.

1 – Vamos criar uma tabela chamada “venda” contendo quatro colunas: idVenda, horaVenda, dataEntrega e horaEntrega:

CREATE TABLE venda (
  idVenda SMALLINT PRIMARY KEY AUTO_INCREMENT,
  horaVenda TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  dataEntrega DATE,
  horaEntrega TIME
);

e vamos inserir um registro nesta tabela:

INSERT INTO venda (dataEntrega, horaEntrega)
VALUES ("2018-12-03", "13:40:00");

Note que não inserimos um valor para a coluna horaVenda, pois ela recebe o valor padrão CURRENT_TIMESTAMP, que significa a data e hora atuais do sistema no momento da inserção do registro. Podemos inserir um timestamp diferente se for necessário.

Também é possível ignorar os hífens e os sinais de dois-pontos ao inserir os dados com INSERT:

INSERT INTO venda (dataEntrega, horaEntrega)
VALUES ("20181223", "134000");

Consultando a tabela:

SELECT * FROM venda;

Tipos de data e hora no MySQL, incluindo TIMESTAMP

Como podemos ver, as datas e horário foram armazenados corretamente e pudemos consultar os dados na tabela sem problemas.

Anterior: Tipo de dado ENUM em MySQL.

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Tipos de Data e Hora no MySQL

  1. Bom dia amigo,
    Na busca de um erro no meu projeto sobre data, cheguei aqui neste seu artigo.
    Tenho dois campos sobre data, que é dataentrada(tipo date) e datasaida(tipo date).
    No insert preencho somente data de entrada para depois fazer a atualização quando for o momento de preencher a data de saída.
    Acontece que ao executar o submit salvar registo, somente salva o registro no banco de dados se for preenchido a “data de saída”, caso contrário não salva o registro.
    Este campo preciso somente a data e não com time.
    Não consigo entender este erro, agradeço muito pela ajuda.

    • Alex Silva // 12/02/2022 em 15:20 // Responder

      Boa tarde, Nilton.

      Eu cheguei neste mesmo artigo assim como você, com duvidas referente a um possível erro na data e consegui sanar minhas dúvidas com o conteúdo do artigo. Sei que é muito tarde para responder a sua pergunta pois já deve ter resolvido sua questão mas vou deixar minha resposta para caso haja alguma outra pessoa com a mesma dúvida. Se um destes campos ou os dois estiverem com restrições em sua tabela como campos obrigatórios os dois campos só serão preenchidos caso ‘impute’ os dados dataentrada(tipo date) e datasaida(tipo date) ao mesmo tempo.
      Forte abraço.

Escreva um comentário

Seu e-mail não será divulgado


*