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
TIMESTAMPaz Unix-epocha kezdete óta eltelt másodpercek számát tárolja (1970. január 1. UTC).
- A
-
É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
TIMESTAMPkorlátozott tartományú, a 32 vagy 64 bites reprezentációtól függően, általában 2038-ig.
- A
-
Időzóna:
- A
DATETIMEfüggetlen az időzónától, és pontosan tárolja a bevitt értéket. - A
TIMESTAMPa 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.
- A
-
Méret:
- A tárolási méret enyhén változhat, de gyakran a
TIMESTAMPkisebb (4 bájt) aDATETIME(8 bájt) értékhez képest.
- A tárolási méret enyhén változhat, de gyakran a
-
Automatikus frissítés:
- A
TIMESTAMPautomatikusan frissíthető, amikor a sor megváltozik (alapértelmezettként vagyON UPDATE CURRENT_TIMESTAMP-tel), ez hasznos a legutóbbi módosítás nyomon követésére. ADATETIMEnem rendelkezik ezzel a beépített funkcióval (bár triggerek segítségével elérhető).
- A
Ö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
);