Sobes.tech
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:

    • DATETIME armazena o ano, mês, dia, hora, minuto, segundo.
    • TIMESTAMP armazena a quantidade de segundos passados desde o início da época Unix (1 de janeiro de 1970 UTC).
  • Intervalo de valores:

    • DATETIME geralmente tem um intervalo mais amplo de datas (por exemplo, de '1000-01-01 00:00:00' até '9999-12-31 23:59:59').
    • TIMESTAMP tem um intervalo limitado, dependendo da representação de 32 bits ou 64 bits, geralmente até 2038 para 32 bits.
  • Fuso horário:

    • DATETIME nã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 com DATETIME (8 bytes).
  • Atualização automática:

    • TIMESTAMP pode ser configurado para atualizar automaticamente ao alterar a linha (se usado por padrão ou especificado com ON UPDATE CURRENT_TIMESTAMP), o que é útil para campos que rastreiam a última alteração. DATETIME nã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
);