Sobes.tech
Junior

Popište rozdíl mezi datovými typy DATETIME a TIMESTAMP.

sobes.tech AI

Odpověď od AI

Hlavní rozdíly mezi DATETIME a TIMESTAMP ve většině SQL databází (například MySQL) jsou následující:

  • Uložení:

    • DATETIME ukládá rok, měsíc, den, hodinu, minutu, sekundu.
    • TIMESTAMP ukládá počet sekund od začátku Unixové epochy (1. ledna 1970 UTC).
  • Rozsah hodnot:

    • DATETIME má obvykle širší rozsah dat (například od '1000-01-01 00:00:00' do '9999-12-31 23:59:59').
    • TIMESTAMP má omezený rozsah, závislý na 32bitovém nebo 64bitovém zobrazení, obvykle do roku 2038 pro 32bitové.
  • Časové pásmo:

    • DATETIME nezávisí na časovém pásmu a ukládá přesnou zadanou hodnotu.
    • TIMESTAMP se při ukládání převádí z aktuálního časového pásma do UTC a při načítání zpět, takže hodnota závisí na časovém pásmu klienta.
  • Velikost:

    • Velikost uložení se může mírně lišit, ale často je TIMESTAMP menší (4 bajty) ve srovnání s DATETIME (8 bajtů).
  • Automatická aktualizace:

    • TIMESTAMP může být nastaven na automatickou aktualizaci při změně řádku (pokud je použit jako výchozí nebo s ON UPDATE CURRENT_TIMESTAMP), což je užitečné pro pole sledování poslední změny záznamu. DATETIME tuto funkci nemá (i když lze dosáhnout podobného chováním pomocí triggerů).

Tabulka srovnání:

Charakteristika DATETIME TIMESTAMP
Formát uložení Rok, měsíc, den, hodina, minuta, sekunda Sekundy od začátku Unixové epochy (UTC)
Časové pásmo Nezávisí na časovém pásmu Závisí na časovém pásmu klienta
Rozsah hodnot Obvykle širší, do roku 9999 Omezený, obvykle do roku 2038 (pro 32bitové)
Automatická aktualizace Ne (vestavěná) Ano (volitelně, ON UPDATE CURRENT_TIMESTAMP)
Typická velikost 8 bajtů 4 bajty

Příklad SQL pro vytvoření tabulek:

-- Příklad tabulky s DATETIME
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Příklad tabulky s TIMESTAMP
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatické nastavení času vytvoření
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatické aktualizace při změně
);