Junior
Descreva a diferença entre os tipos de dados DATETIME e TIMESTAMP.
sobes.tech IA
Resposta da IA
As principais diferenças entre DATETIME e TIMESTAMP na maioria das bases de dados SQL (por exemplo, MySQL) são as seguintes:
-
Armazenamento:
DATETIMEarmazena o ano, mês, dia, hora, minuto, segundo.TIMESTAMParmazena a quantidade de segundos passados desde o início da época Unix (1 de janeiro de 1970 UTC).
-
Intervalo de valores:
DATETIMEgeralmente tem um intervalo mais amplo de datas (por exemplo, de '1000-01-01 00:00:00' até '9999-12-31 23:59:59').TIMESTAMPtem um intervalo limitado, dependendo da representação de 32 bits ou 64 bits, geralmente até 2038 para 32 bits.
-
Fuso horário:
DATETIMEnão depende do fuso horário e armazena o valor exato inserido.TIMESTAMPé convertido do fuso horário atual para UTC ao guardar e de volta ao extrair, portanto seu valor depende do fuso horário do cliente.
-
Tamanho:
- O tamanho de armazenamento pode variar ligeiramente, mas frequentemente
TIMESTAMPé menor (4 bytes) em comparação comDATETIME(8 bytes).
- O tamanho de armazenamento pode variar ligeiramente, mas frequentemente
-
Atualização automática:
TIMESTAMPpode ser configurado para atualizar automaticamente ao alterar a linha (se usado por padrão ou especificado comON UPDATE CURRENT_TIMESTAMP), o que é útil para campos que rastreiam a última alteração.DATETIMEnão possui essa capacidade embutida (embora possa ser alcançada com triggers).
Tabela comparativa:
| Característica | DATETIME | TIMESTAMP |
|---|---|---|
| Formato de armazenamento | Ano, mês, dia, hora, minuto, segundo | Segundos desde a época Unix (UTC) |
| Fuso horário | Não depende do fuso horário | Depende do fuso horário do cliente |
| Intervalo de valores | Geralmente mais amplo, até o ano 9999 | Limitado, geralmente até 2038 (para 32 bits) |
| Atualização automática | Não (integrada) | Sim (opcional, ON UPDATE CURRENT_TIMESTAMP) |
| Tamanho típico | 8 bytes | 4 bytes |
Exemplo de SQL para criar tabelas:
-- Exemplo de tabela com DATETIME
CREATE TABLE events_datetime (
id INT PRIMARY KEY,
event_name VARCHAR(255),
event_time DATETIME
);
-- Exemplo de tabela com TIMESTAMP
CREATE TABLE events_timestamp (
id INT PRIMARY KEY,
event_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Estabelecimento automático do tempo de criação
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Atualização automática ao alterar
);