Sobes.tech
Junior

Popíšte rozdiel medzi dátovými typmi DATETIME a TIMESTAMP.

sobes.tech AI

Odpoveď od AI

Hlavné rozdiely medzi DATETIME a TIMESTAMP vo väčšine SQL databáz (napríklad MySQL) sú nasledovné:

  • Uloženie:

    • DATETIME uloží rok, mesiac, deň, hodinu, minútu, sekundu.
    • TIMESTAMP uloží počet sekúnd od začiatku Unixovej epochy (1. januára 1970 UTC).
  • Rozsah hodnôt:

    • DATETIME má zvyčajne širší rozsah dát (napríklad od '1000-01-01 00:00:00' do '9999-12-31 23:59:59').
    • TIMESTAMP má obmedzený rozsah, závislý od 32-bitového alebo 64-bitového zobrazenia, zvyčajne do roku 2038 pre 32-bitové.
  • Časové pásmo:

    • DATETIME nezávisí od časového pásma a uloží presnú zadanú hodnotu.
    • TIMESTAMP sa pri ukladaní konvertuje z aktuálneho časového pásma do UTC a pri načítaní späť, takže hodnota závisí od časového pásma klienta.
  • Veľkosť:

    • Veľkosť uloženia sa môže mierne líšiť, ale často je TIMESTAMP menší (4 bajty) v porovnaní s DATETIME (8 bajtov).
  • Automatická aktualizácia:

    • TIMESTAMP môže byť nastavený na automatickú aktualizáciu pri zmene riadku (ak je použitý ako predvolený alebo s ON UPDATE CURRENT_TIMESTAMP), čo je užitočné pre polia sledovania poslednej zmeny záznamu. DATETIME túto funkciu nemá (hoci je možné dosiahnuť podobným správaním pomocou triggerov).

Tabuľka porovnania:

Charakteristika DATETIME TIMESTAMP
Formát uloženia Rok, mesiac, deň, hodina, minúta, sekunda Sekundy od začiatku Unixovej epochy (UTC)
Časové pásmo Nezávisí od časového pásma Závisí od časového pásma klienta
Rozsah hodnôt Obvykle širší, do roku 9999 Obmedzený, obvykle do roku 2038 (pre 32-bitové)
Automatická aktualizácia Nie (vestavěná) Je (voliteľná, ON UPDATE CURRENT_TIMESTAMP)
Typická veľkosť 8 bajtov 4 bajty

Príklad SQL pre vytvorenie tabuliek:

-- Príklad tabuľky s DATETIME
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Príklad tabuľky s TIMESTAMP
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatické nastavenie času vytvorenia
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatické aktualizácie pri zmene
);