Sobes.tech
Junior

Aprašykite skirtumą tarp duomenų tipų DATETIME ir TIMESTAMP.

sobes.tech AI

Atsakymas iš AI

Dauguma SQL duomenų bazių pagrindiniai skirtumai tarp DATETIME ir TIMESTAMP yra šie:

  • Saugojimas:

    • DATETIME saugo metus, mėnesį, dieną, valandą, minutę, sekundę.
    • TIMESTAMP saugo sekundžių skaičių nuo Unix epochos pradžios (1970 m. sausio 1 d. UTC).
  • Reikšmių diapazonas:

    • DATETIME paprastai turi platesnį diapazoną (pavyzdžiui, nuo '1000-01-01 00:00:00' iki '9999-12-31 23:59:59').
    • TIMESTAMP turi ribotą diapazoną, priklausomai nuo 32 ar 64 bitų atvaizdavimo, dažniausiai iki 2038 metų 32 bitų sistemoms.
  • Laiko juosta:

    • DATETIME nepriklauso nuo laiko juostos ir saugo tikslų įvestą reikšmę.
    • TIMESTAMP konvertuojamas iš esamos laiko juostos į UTC saugojimui ir atgal, todėl reikšmė priklauso nuo kliento laiko juostos.
  • Dydis:

    • Saugojimo dydis gali šiek tiek skirtis, tačiau dažnai TIMESTAMP yra mažesnis (4 baitai) nei DATETIME (8 baitai).
  • Automatinis atnaujinimas:

    • TIMESTAMP gali būti nustatytas automatiškai atnaujinti, kai keičiasi eilutė (jei naudojamas kaip numatytasis arba su ON UPDATE CURRENT_TIMESTAMP), tai patogu paskutinio pakeitimo laiko stebėjimui. DATETIME tokios galimybės neturi (nors galima pasiekti naudojant trigerius).

Lyginamoji lentelė:

Savybė DATETIME TIMESTAMP
Saugojimo formatas Metai, mėnuo, diena, valanda, minutė, sekundė Sekundės nuo Unix epochos pradžios (UTC)
Laiko juosta Nepriklauso nuo laiko juostos Priklauso nuo kliento laiko juostos
Diapazonas Paprastai platesnis, iki 9999 metų Ribotas, dažniausiai iki 2038 metų (32 bitų)
Automatinis atnaujinimas Nėra (įmontuotas) Yra (pasirinktinai, ON UPDATE CURRENT_TIMESTAMP)
Tipas dydis 8 baitai 4 baitai

Pavyzdinis SQL, kuriuo sukuriamos lentelės:

-- Pavyzdinė lentelė su DATETIME
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Pavyzdinė lentelė su TIMESTAMP
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatinis sukūrimo laiko nustatymas
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatinis atnaujinimas
);