.
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 :
DATETIMEarmazena 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), enquantoTIMESTAMPé adequado para dados vinculados ao fuso horário do servidor, como logs. - Formato de armazenamento :
DATETIMEé armazenado como está, enquantoTIMESTAMPé armazenado como um timestamp UNIX. Como resultado, os valores deTIMESTAMPsã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.


