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:
DATETIMEsalvestab aasta, kuu, päeva, tunni, minuti, sekundi.TIMESTAMPsalvestab sekundite arvu Unix epohsi algusest (1. jaanuar 1970 UTC).
-
Väärtuste vahemik:
DATETIMEtavaliselt laiem vahemik (näiteks '1000-01-01 00:00:00' kuni '9999-12-31 23:59:59').TIMESTAMPon piiratud vahemik, sõltuvalt 32- või 64-bitise esitlusest, tavaliselt kuni 2038. aastani 32-bitise puhul.
-
Ajavöönd:
DATETIMEei sõltu ajavööndist ja salvestab täpse sisestatud väärtuse.TIMESTAMPteisendatakse 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
TIMESTAMPväiksem (4 baiti) võrreldesDATETIME-ga (8 baiti).
- Salvestusmaht võib veidi erineda, kuid sageli on
-
Automaatne uuendamine:
TIMESTAMPvõib olla seadistatud automaatselt uuendama, kui rida muudetakse (kui kasutatakse vaikimisi võiON 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
);