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:
DATETIMEsaugo metus, mėnesį, dieną, valandą, minutę, sekundę.TIMESTAMPsaugo sekundžių skaičių nuo Unix epochos pradžios (1970 m. sausio 1 d. UTC).
-
Reikšmių diapazonas:
DATETIMEpaprastai turi platesnį diapazoną (pavyzdžiui, nuo '1000-01-01 00:00:00' iki '9999-12-31 23:59:59').TIMESTAMPturi ribotą diapazoną, priklausomai nuo 32 ar 64 bitų atvaizdavimo, dažniausiai iki 2038 metų 32 bitų sistemoms.
-
Laiko juosta:
DATETIMEnepriklauso nuo laiko juostos ir saugo tikslų įvestą reikšmę.TIMESTAMPkonvertuojamas 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
TIMESTAMPyra mažesnis (4 baitai) neiDATETIME(8 baitai).
- Saugojimo dydis gali šiek tiek skirtis, tačiau dažnai
-
Automatinis atnaujinimas:
TIMESTAMPgali būti nustatytas automatiškai atnaujinti, kai keičiasi eilutė (jei naudojamas kaip numatytasis arba suON UPDATE CURRENT_TIMESTAMP), tai patogu paskutinio pakeitimo laiko stebėjimui.DATETIMEtokios 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
);