Sobes.tech
Junior

Írja le a DATETIME és TIMESTAMP adattípusok közötti különbséget.

sobes.tech MI

Válasz az MI-től

A legtöbb SQL-adatbázisban (például MySQL) a DATETIME és a TIMESTAMP közötti fő különbségek a következők:

  • Tárolás:

    • A DATETIME év, hónap, nap, óra, perc, másodperc tárolására szolgál.
    • A TIMESTAMP az Unix-epocha kezdete óta eltelt másodpercek számát tárolja (1970. január 1. UTC).
  • Értéktartomány:

    • A DATETIME általában szélesebb dátumtartományt fed le (például '1000-01-01 00:00:00' és '9999-12-31 23:59:59' között).
    • A TIMESTAMP korlátozott tartományú, a 32 vagy 64 bites reprezentációtól függően, általában 2038-ig.
  • Időzóna:

    • A DATETIME független az időzónától, és pontosan tárolja a bevitt értéket.
    • A TIMESTAMP a tárolás során a jelenlegi időzónából UTC-re konvertálódik, és visszaolvasáskor is, így értéke a kliens időzónájától függ.
  • Méret:

    • A tárolási méret enyhén változhat, de gyakran a TIMESTAMP kisebb (4 bájt) a DATETIME (8 bájt) értékhez képest.
  • Automatikus frissítés:

    • A TIMESTAMP automatikusan frissíthető, amikor a sor megváltozik (alapértelmezettként vagy ON UPDATE CURRENT_TIMESTAMP-tel), ez hasznos a legutóbbi módosítás nyomon követésére. A DATETIME nem rendelkezik ezzel a beépített funkcióval (bár triggerek segítségével elérhető).

Összehasonlító táblázat:

Jellemző DATETIME TIMESTAMP
Tárolási formátum Év, hónap, nap, óra, perc, másodperc Unix-epocha kezdete óta eltelt másodpercek
Időzóna Nem függ az időzónától Függ a kliens időzónájától
Értéktartomány Általában szélesebb, 9999-ig Korlátozott, általában 2038-ig (32-bit)
Automatikus frissítés Nem (beépített) Igen (opcionális, ON UPDATE CURRENT_TIMESTAMP)
Tipikus méret 8 bájt 4 bájt

SQL példa táblák létrehozására:

-- DATETIME típusú tábla példa
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- TIMESTAMP típusú tábla példa
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatikus létrehozási idő beállítása
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatikus frissítés változáskor
);