Sobes.tech
Junior

Kirjeldage erinevust DATETIME ja TIMESTAMP andmetüüpide vahel.

sobes.tech AI

Vastus AI-lt

Enamikus SQL-andmebaasides on DATETIME ja TIMESTAMP peamised erinevused järgmised:

  • Salvestamine:

    • DATETIME salvestab aasta, kuu, päeva, tunni, minuti, sekundi.
    • TIMESTAMP salvestab sekundite arvu Unix epohsi algusest (1. jaanuar 1970 UTC).
  • Väärtuste vahemik:

    • DATETIME tavaliselt laiem vahemik (näiteks '1000-01-01 00:00:00' kuni '9999-12-31 23:59:59').
    • TIMESTAMP on piiratud vahemik, sõltuvalt 32- või 64-bitise esitlusest, tavaliselt kuni 2038. aastani 32-bitise puhul.
  • Ajavöönd:

    • DATETIME ei sõltu ajavööndist ja salvestab täpse sisestatud väärtuse.
    • TIMESTAMP teisendatakse praegusest ajavööndist UTC-ks salvestamisel ja tagasi lugemisel, seega sõltub väärtus kliendi ajavööndist.
  • Suurus:

    • Salvestusmaht võib veidi erineda, kuid sageli on TIMESTAMP väiksem (4 baiti) võrreldes DATETIME-ga (8 baiti).
  • Automaatne uuendamine:

    • TIMESTAMP võib olla seadistatud automaatselt uuendama, kui rida muudetakse (kui kasutatakse vaikimisi või ON UPDATE CURRENT_TIMESTAMP), mis on kasulik viimase muutmise aja jälgimiseks. DATETIME-il seda funktsiooni pole (kuigi seda saab saavutada trigereid kasutades).

Võrdlustabel:

Omadus DATETIME TIMESTAMP
Salvestamise formaat Aasta, kuu, päev, tund, minut, sekund Sekundid Unix epohsi algusest (UTC)
Ajavöönd Sõltumatu ajavööndist Sõltub kliendi ajavööndist
Vahemik Tavaliselt laiem, kuni 9999. aastani Piiratud, tavaliselt kuni 2038. aastani (32-bit)
Automaatne uuendamine Ei (sisseehitatud) On (valikuline, ON UPDATE CURRENT_TIMESTAMP)
Tüüpide suurus 8 baiti 4 baiti

Näide SQL-iga tabelite loomise kohta:

-- Näidetabel `DATETIME`-ga
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Näidetabel `TIMESTAMP`-ga
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automaatne loomise aja määramine
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automaatne uuendamine
);