1. Co je v MySQL DATETIME?
Typ DATETIME v MySQL je datový typ určený k současnému zpracování hodnot data i času. Správa data a času v databázi je zásadní pro různé aplikace, jako jsou protokolování nebo rezervační systémy. Typ DATETIME ukládá datum i čas v jednom poli a může obsahovat široký rozsah hodnot, od '1000-01-01 00:00:00' do '9999-12-31 23:59:59', a také podporuje zlomkové sekundy.
2. Přehled datových typů pro datum a čas v MySQL
2.1 Datové typy pro práci s daty a časy
MySQL poskytuje následující datové typy pro práci s daty a časy:
DATE: Datový typ pro práci s daty (rok, měsíc, den). Rozsah je od'1000-01-01'do'9999-12-31'.TIME: Datový typ pro práci pouze s časem. Rozsah je od'-838:59:59'do'838:59:59'.DATETIME: Datový typ, který kombinuje datum i čas. Rozsah je od'1000-01-01 00:00:00'do'9999-12-31 23:59:59'.TIMESTAMP: Datový typ pro ukládání UNIXových časových razítek. Rozsah je od'1970-01-01 00:00:01'do'2038-01-19 03:14:07'.
2.2 Rozdíly mezi DATETIME a TIMESTAMP
Ačkoli jsou DATETIME a TIMESTAMP podobné, mají následující klíčové rozdíly:
- Časové pásmo :
DATETIMEukládá pevnou hodnotu, která je nezávislá na časovém pásmu. Naopak hodnotyTIMESTAMPjsou při uložení převedeny na UTC a při načtení zpět na aktuální časové pásmo serveru. Proto jeDATETIMEvhodný pro data a časy, které nejsou ovlivněny časovými pásmy (např. časy událostí), zatímcoTIMESTAMPje vhodnější pro data související s časovým pásmem serveru, jako jsou záznamy protokolů. - Formát uložení :
DATETIMEje uložen v přesném zobrazení, zatímcoTIMESTAMPje uložen jako UNIXové časové razítko. V důsledku toho jeTIMESTAMPovlivněn nastavením časového pásma serveru pro své časové zobrazení.
3. Jak používat DATETIME v MySQL
3.1 Vytvoření sloupce DATETIME
Pro vytvoření sloupce typu DATETIME použijte následující SQL syntaxi:
CREATE TABLE sample_table (
event_time DATETIME
);
V tomto příkladu vytváříme sloupec DATETIME s názvem event_time v tabulce nazvané sample_table.
3.2 Vkládání hodnot DATETIME
Hodnoty DATETIME v MySQL lze vkládat v různých formátech. Základní formát je 'YYYY-MM-DD HH:MM:SS'. Například:
INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');
Další povolené formáty zahrnují:
'YY-MM-DD HH:MM:SS': Formát, který určuje rok pomocí dvou číslic.'YYYYMMDDHHMMSS': Formát, který uvádí hodnoty bez oddělovačů.
Příklady:
INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);
Data vložená v těchto formátech budou uložena správně. Pokud je rok zadán pomocí dvou číslic, '70-99' bude převedeno na 1970-1999 a '00-69' bude převedeno na 2000-2069.
3.3 Načítání hodnot DATETIME
Při načítání hodnot DATETIME MySQL je zobrazuje ve výchozím formátu 'YYYY-MM-DD HH:MM:SS'. Například:
SELECT event_time FROM sample_table;
Tento dotaz zobrazí hodnoty sloupce DATETIME ve vaší tabulce ve standardním formátu.
4. Práce se zlomkovými sekundami
4.1 Přesnost DATETIME
MySQL umožňuje zahrnout zlomkové sekundy do hodnot DATETIME. Přesnost můžete specifikovatí volby fsp, která umožňuje ukládat zlomkové sekundy v rozsahu od 0 do 6. Například pro vytvoření sloupce se třemi desetinnými místy pro zlomkové sekundy:
CREATE TABLE precise_times (
event_time DATETIME(3)
);
V tomto příkladu může sloupec event_time ukládat až tři číslice zlomkových sekund.
4.2 Vkládání hodnot se zlomkovými sekundami
Pro vložení hodnoty DATETIME, která obsahuje zlomkové sekundy, použijte následující:
INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');
Tento dotaz přesně ukládá hodnoty včetně zlomkových sekund. Vložená zlomková část je uložena bez oříznutí a její přesnost je zachována při načtení.

5. Nejlepší postupy pro DATETIME
5.1 Kdy použít DATETIME vs. TIMESTAMP
- Použijte
DATETIME, když : Ukládáte pevná data a časy, které jsou nezávislé na časových pásmech (např. časy zahájení událostí, data rezervací). - Použijte
TIMESTAMP, když : Ukládáte data a čas, které jsou spojeny s časovým pásmem serveru (např. časy vytvoření nebo aktualizace dat).
5.2 Správa časových pásem
Protože DATETIME nemá pojem časových pásem, správa časových pásem musí být řešena aplikací. Na druhou stranu TIMESTAMP automaticky zohledňuje časové pásmo serveru při ukládání a načítání hodnot, což jej činí vhodným pro operace napříč různými časovými pásmy po celém světě.
6. Časté chyby a jak se jim vyhnout
6.1 Nulové datum a neplatné hodnoty
V MySQL pokus o vložení neplatné hodnoty DATETIME povede k uložení „nulového data“ '0000-00 00:00:00'. Protože se jedná obecně o neplatné datum, je zásadní validovat vstupní data, aby se zabránilo vložení neplatných hodnot. Implementace validace, která zajistí, že vstupní data odpovídají vhodným rozsahům a formátům, může zabránit ukládání nulových dat.
6.2 Nesprávné použití přesnosti
Při specifikaci přesnosti zlomkových sekund může nesprávná přesnost vést k nechtěným výsledkům. Zlomkovou přesnost specifikujte pouze v případě potřeby a pečlivě nastavte hodnotu fsp. Například pokud vaše aplikace nevyžaduje podsekundovou přesnost, není nutné nastavovat zlomkové sekundy pro sloupec DATETIME.
7. Závěr
Tento článek poskytl podrobný popis datového typu MySQL DATETIME. DATETIME je velmi užitečný datový typ pro současné zpracování data i času, vhodný pro ukládání hodnot, které nejsou ovlivněny časovými pásmy. Porozuměním rozdílům mezi DATETIME a TIMESTAMP, správě časových pásem a použití zlomkových sekund můžete efektivně spravovat data a čas ve své databázi. Navíc znalost běžných chyb a strategií jejich předcházení pomůže udržet konzistenci a spolehlivost dat.
8. Často kladené otázky (FAQ)
Q1: Jaké jsou hlavní rozdíly mezi DATETIME TIMESTAMP?
DATETIME ukládá pevné datum a čas nezávislé na časových pásmech. Například je vhodný pro ukládání dat rezervací nebo časů událostí, které zůstávají konzistentní napříč všemi časovými pásmy. Naopak TIMESTAMP je ukládán na základě UTC a při načtení je převeden na časové pásmo serveru. Je vhodný pro časově citlivá data, jako jsou záznamy logů, které závisí na časovém pásmu serveru.
Q2: Jak mohu uložit zlomkové sekundy s DATETIME?
Při vytváření sloupce DATETIME můžete nastavit přesnost zlomkových sekund zadáním hodnoty fsp. Například zadání DATETIME(3) umožňuje ukládat zlomkové sekundy až na tři desetinná místa. Při vkládání použijte hodnotu, která zahrnuje zlomkové sekundy, a bude uložena ve vhodném formátu.
Q3: Mám použít DATETIME nebo TIMESTAMP?
Záleží na vašem konkrétním použití. Použijte DATETIME, pokud chcete uložit pevné datum a čas. Na druhou stranu použijte TIMESTAMP pro data a čas, které jsou ovlivněny časovým pásmem serveru, například časy vytvoření nebo aktualizace dat. TIMESTAMP je vhodný, když je vyžadována automatická konverze časových pásem, zejména pro operace napříč různými časovými pásmy.


