Junior
Popíšte rozdiel medzi dátovými typmi DATETIME a TIMESTAMP.
sobes.tech AI
Odpoveď od AI
Hlavné rozdiely medzi DATETIME a TIMESTAMP vo väčšine SQL databáz (napríklad MySQL) sú nasledovné:
-
Uloženie:
DATETIMEuloží rok, mesiac, deň, hodinu, minútu, sekundu.TIMESTAMPuloží počet sekúnd od začiatku Unixovej epochy (1. januára 1970 UTC).
-
Rozsah hodnôt:
DATETIMEmá zvyčajne širší rozsah dát (napríklad od '1000-01-01 00:00:00' do '9999-12-31 23:59:59').TIMESTAMPmá obmedzený rozsah, závislý od 32-bitového alebo 64-bitového zobrazenia, zvyčajne do roku 2038 pre 32-bitové.
-
Časové pásmo:
DATETIMEnezávisí od časového pásma a uloží presnú zadanú hodnotu.TIMESTAMPsa pri ukladaní konvertuje z aktuálneho časového pásma do UTC a pri načítaní späť, takže hodnota závisí od časového pásma klienta.
-
Veľkosť:
- Veľkosť uloženia sa môže mierne líšiť, ale často je
TIMESTAMPmenší (4 bajty) v porovnaní sDATETIME(8 bajtov).
- Veľkosť uloženia sa môže mierne líšiť, ale často je
-
Automatická aktualizácia:
TIMESTAMPmôže byť nastavený na automatickú aktualizáciu pri zmene riadku (ak je použitý ako predvolený alebo sON UPDATE CURRENT_TIMESTAMP), čo je užitočné pre polia sledovania poslednej zmeny záznamu.DATETIMEtúto funkciu nemá (hoci je možné dosiahnuť podobným správaním pomocou triggerov).
Tabuľka porovnania:
| Charakteristika | DATETIME | TIMESTAMP |
|---|---|---|
| Formát uloženia | Rok, mesiac, deň, hodina, minúta, sekunda | Sekundy od začiatku Unixovej epochy (UTC) |
| Časové pásmo | Nezávisí od časového pásma | Závisí od časového pásma klienta |
| Rozsah hodnôt | Obvykle širší, do roku 9999 | Obmedzený, obvykle do roku 2038 (pre 32-bitové) |
| Automatická aktualizácia | Nie (vestavěná) | Je (voliteľná, ON UPDATE CURRENT_TIMESTAMP) |
| Typická veľkosť | 8 bajtov | 4 bajty |
Príklad SQL pre vytvorenie tabuliek:
-- Príklad tabuľky s DATETIME
CREATE TABLE events_datetime (
id INT PRIMARY KEY,
event_name VARCHAR(255),
event_time DATETIME
);
-- Príklad tabuľky s TIMESTAMP
CREATE TABLE events_timestamp (
id INT PRIMARY KEY,
event_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatické nastavenie času vytvorenia
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatické aktualizácie pri zmene
);