MySQL DATETIME Explicado: Tipo de Dados, Intervalo e Melhores Práticas

.

1. O que é o DATETIME do MySQL?

O DATETIME do MySQL é um tipo de dado usado para armazenar data e hora em um único campo. Gerenciar valores de data e hora em um banco de dados é essencial para muitas aplicações, como sistemas de registro e de reservas. O tipo DATETIME armazena data e hora juntos e suporta uma ampla gama de valores. Seu intervalo vai de '1000-01-01 00:00:00' a '9999-12-31 23:59:59', e também aceita frações de segundo.

2. Visão geral dos tipos de dados de data e hora do MySQL

2.1 Tipos de dados para manipular datas e horas

O MySQL fornece os seguintes tipos de dados para trabalhar com datas e horas:

  • DATE : Armazena uma data (ano, mês, dia). O intervalo é '1000-01-01' a '9999-12-31'.
  • TIME : Armazena apenas hora. O intervalo é '-838:59:59' a '838:59:59'.
  • DATETIME : Armazena data e hora. O intervalo é '1000-01-01 00:00:00' a '9999-12-31 23:59:59'.
  • TIMESTAMP : Armazena um timestamp UNIX. O intervalo é '1970-01-01 00:00:01' a '2038-01-19 03:14:07'.

2.2 Diferenças entre DATETIME e TIMESTAMP

DATETIME e TIMESTAMP são semelhantes, mas apresentam as seguintes diferenças:

  • Fuso horário : DATETIME armazena um valor fixo que não depende de fusos horários. Em contraste, TIMESTAMP é convertido para UTC ao ser armazenado e convertido para o fuso horário atual do servidor ao ser recuperado. Por isso, DATETIME é adequado para valores de data/hora independentes de fuso horário (por exemplo, horários de eventos), enquanto TIMESTAMP é adequado para dados vinculados ao fuso horário do servidor, como logs.
  • Formato de armazenamento : DATETIME é armazenado como está, enquanto TIMESTAMP é armazenado como um timestamp UNIX. Como resultado, os valores de TIMESTAMP são afetados pelas configurações de fuso horário do servidor ao representar o tempo.

3. Como usar DATETIME no MySQL

3.1 Criando uma coluna DATETIME

Para criar uma coluna com o tipo DATETIME, use a seguinte sintaxe SQL:

CREATE TABLE sample_table (
    event_time DATETIME
);

Neste exemplo, uma coluna DATETIME chamada event_time é criada em uma tabela chamada sample_table.

3.2 Inserindo valores DATETIME

Valores DATETIME do MySQL podem ser inseridos em vários formatos. O formato básico é 'YYYY-MM-DD HH:MM:SS'. Por exemplo:

INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');

Os seguintes formatos também são permitidos:

  • 'YY-MM-DD HH:MM:SS' : Um formato que usa ano com 2 dígitos.
  • 'YYYYMMDDHHMMSS' : Um formato sem separadores.

Exemplo:

INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);

Dados inseridos nesses formatos serão armazenados corretamente. Se o ano for especificado com dois dígitos, '70-99' será convertido para 1970-1999 e '00-69' será convertido para 2000-2069.

3.3 Recuperando valores DATETIME

Ao recuperar valores DATETIME, o MySQL os exibe no formato padrão 'YYYY-MM-DD HH:MM:SS'. Por exemplo:

SELECT event_time FROM sample_table;

Esta consulta exibe os valores da coluna DATETIME usando o formato padrão.

4. Trabalhando com frações de segundo

4.1 Precisão do DATETIME

No MySQL, valores DATETIME podem incluir frações de segundo. Você pode especificar a precisão usando a opção fsp, que permite armazenar frações de segundo de 0 a 6 dígitos. Por exemplo, para criar uma coluna com 3 dígitos de fração de segundo:

CREATE TABLE precise_times (
    event_time DATETIME(3)
);

Neste exemplo, a coluna event_time pode armazenar frações de segundo com até 3 dígitos.

4.2 Inserindo valores com frações de segundo

Para inserir um valor DATETIME que inclua frações de segundo, use o seguinte:

INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');

Esta consulta armazena o valor incluindo segundos fracionários com precisão. A parte fracionária é armazenada sem ser truncada, e a precisão é preservada ao recuperar o valor.

5. Melhores Práticas para DATETIME

5.1 Escolhendo Entre DATETIME e TIMESTAMP

  • Quando usar DATETIME : Para valores de data/hora fixos que não dependem de fusos horários (por exemplo, horários de início de eventos ou datas de reservas).
  • Quando usar TIMESTAMP : Para dados de data/hora relacionados ao fuso horário do servidor (por exemplo, carimbos de data/hora de criação ou atualização de registros).

5.2 Gerenciamento de Fuso Horário

Como o DATETIME não armazena informações de fuso horário, sua aplicação deve gerenciar fusos horários separadamente. Por outro lado, o TIMESTAMP considera automaticamente o fuso horário do servidor ao armazenar e recuperar valores, tornando-o adequado para sistemas que operam em diferentes fusos horários ao redor do mundo.

6. Erros Comuns e Como Evitá-los

6.1 Datas Zero e Valores Inválidos

No MySQL, se você tentar inserir um valor DATETIME inválido, uma data zero como '0000-00-00 00:00:00' pode ser armazenada. Como isso geralmente não é uma data válida, você deve validar os dados de entrada para evitar que valores inválidos sejam inseridos. Implementar validação que garante que a entrada siga o intervalo e formato corretos pode ajudar a prevenir o armazenamento de datas zero.

6.2 Uso Incorreto da Precisão

Ao especificar a precisão de segundos fracionários, usar a precisão errada pode produzir resultados inesperados. Defina a precisão de segundos fracionários apenas quando necessário e escolha o valor fsp com cuidado. Por exemplo, se sua aplicação não requer precisão subsegundo, você não precisa adicionar segundos fracionários a uma coluna DATETIME.

7. Resumo

Neste artigo, explicamos o tipo DATETIME do MySQL em detalhes. O DATETIME é um tipo de dados muito útil para armazenar data e hora, e é adequado quando você precisa armazenar valores que não devem ser afetados por fusos horários. Ao entender as diferenças entre DATETIME e TIMESTAMP, como os fusos horários funcionam e como usar segundos fracionários, você pode gerenciar dados de data/hora de forma mais eficaz em seu banco de dados. Além disso, conhecer erros comuns e como evitá-los ajuda a manter a consistência e confiabilidade dos dados.

8. Perguntas Frequentes (FAQ)

P1: Qual é a principal diferença entre DATETIME e TIMESTAMP?

O DATETIME armazena uma data e hora fixas que não dependem de fusos horários. Por exemplo, é adequado para armazenar datas de reservas ou horários de eventos que devem permanecer os mesmos em qualquer fuso horário. Em contraste, o TIMESTAMP é armazenado em UTC e convertido para o fuso horário do servidor ao ser recuperado. É adequado para dados de data/hora que dependem do fuso horário do servidor, como logs.

P2: Como posso armazenar segundos fracionários com DATETIME?

Você pode definir a precisão de segundos fracionários especificando um valor fsp ao criar a coluna DATETIME. Por exemplo, DATETIME(3) armazena segundos fracionários com até 3 dígitos. Use um valor formatado corretamente incluindo segundos fracionários ao inserir, e ele será armazenado corretamente.

P3: Devo usar DATETIME ou TIMESTAMP?

Depende do seu caso de uso. Use DATETIME quando quiser armazenar uma data e hora fixas. Use TIMESTAMP para dados de data/hora que são afetados pelo fuso horário do servidor, como horários de criação ou atualização de registros. Como o TIMESTAMP realiza conversão automática de fuso horário, é adequado quando seu sistema deve operar em diferentes fusos horários.