Junior
Popište rozdíl mezi datovými typy DATETIME a TIMESTAMP.
sobes.tech AI
Odpověď od AI
Hlavní rozdíly mezi DATETIME a TIMESTAMP ve většině SQL databází (například MySQL) jsou následující:
-
Uložení:
DATETIMEukládá rok, měsíc, den, hodinu, minutu, sekundu.TIMESTAMPukládá počet sekund od začátku Unixové epochy (1. ledna 1970 UTC).
-
Rozsah hodnot:
DATETIMEmá obvykle širší rozsah dat (například od '1000-01-01 00:00:00' do '9999-12-31 23:59:59').TIMESTAMPmá omezený rozsah, závislý na 32bitovém nebo 64bitovém zobrazení, obvykle do roku 2038 pro 32bitové.
-
Časové pásmo:
DATETIMEnezávisí na časovém pásmu a ukládá přesnou zadanou hodnotu.TIMESTAMPse při ukládání převádí z aktuálního časového pásma do UTC a při načítání zpět, takže hodnota závisí na časovém pásmu klienta.
-
Velikost:
- Velikost uložení se může mírně lišit, ale často je
TIMESTAMPmenší (4 bajty) ve srovnání sDATETIME(8 bajtů).
- Velikost uložení se může mírně lišit, ale často je
-
Automatická aktualizace:
TIMESTAMPmůže být nastaven na automatickou aktualizaci při změně řádku (pokud je použit jako výchozí nebo sON UPDATE CURRENT_TIMESTAMP), což je užitečné pro pole sledování poslední změny záznamu.DATETIMEtuto funkci nemá (i když lze dosáhnout podobného chováním pomocí triggerů).
Tabulka srovnání:
| Charakteristika | DATETIME | TIMESTAMP |
|---|---|---|
| Formát uložení | Rok, měsíc, den, hodina, minuta, sekunda | Sekundy od začátku Unixové epochy (UTC) |
| Časové pásmo | Nezávisí na časovém pásmu | Závisí na časovém pásmu klienta |
| Rozsah hodnot | Obvykle širší, do roku 9999 | Omezený, obvykle do roku 2038 (pro 32bitové) |
| Automatická aktualizace | Ne (vestavěná) | Ano (volitelně, ON UPDATE CURRENT_TIMESTAMP) |
| Typická velikost | 8 bajtů | 4 bajty |
Příklad SQL pro vytvoření tabulek:
-- Příklad tabulky s DATETIME
CREATE TABLE events_datetime (
id INT PRIMARY KEY,
event_name VARCHAR(255),
event_time DATETIME
);
-- Příklad tabulky s TIMESTAMP
CREATE TABLE events_timestamp (
id INT PRIMARY KEY,
event_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatické nastavení času vytvoření
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatické aktualizace při změně
);