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;
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.
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.
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.