MySQL (8) - Ukládání datumů
Dnes se popereme s kalendářem - budeme totiž do MySQL ukládat datum a čas.
29.3.2005 15:00 |
Petr Zajíc
| Články autora
| přečteno 51083×
Snad každý soudobý DBMS systém má podporu pro zpracování a ukládání
hodnot reprezentujících datum a čas. Nejinak je tomu v případě MySQL a
proto se dnes podíváme, co nám tato databáze může při zpracování
časových údajů nabídnout.
Pozn.: V tomto článku, a vlastně v
celém seriálu se pokusím používat termín "data" (jednotné číslo to
nemá) pro obecné označení údajů v databázi a termín "datumy" (jedn. č.
datum) pro údaje o čase. Abychom si rozumněli.
Datový typ Date
MySQL používá pro uložení kalendářních datumů datový typ Date.
Pojme datumy od 1.1.1000 do 31.12.9999, což je myslím více než
dostatečné. V databázi zabere 3 bajty místa. Při vkládání údajů do
sloupce typu Date je MySQL více než
benevolentní, takže všechny níže uvedené způsoby můžete použít:
20041231
'2004-12-31'
'04-12-31'
Jestliže při zadávání datumu překročíte povolený rozsah, vyvolá to
varování a do databáze se vloží 0000-00-00. Datový typ Date budete asi
běžně používat na takové věci, jako je ukládání datumů v obchodních
aplikacích. Třeba v účetnictví.
Typ Time
MySQL datový typ Time neukládá datum, ale čas. Může se jednat o čas
během
skutečného dne, nebo prostě může jít o interval mezi dvěma událostmi.
To také vysvětluje, proč sloupec typu Time nemá rozsah 00:00:00 -
23:59:59 (jak byste možná čekali), ale -838:59:59 až +838:59:59. Rovněž
údaje o čase lze vkládat různými
způsoby:
V databázi zabírá tento typ 3 bajty místa, stejně jako Date. Při
překročení rozsahu se vyvolá varování a vloží se hodnota 00:00. Na co
použijete typ Time? Třeba na ukládání sportovních výsledků.
Typ Datetime
Typ datetime vlastně kombinuje předchozí dva typy, a to tím, že
ukládá jak datum, tak i čas. Umím si jej docela dobře představit třeba
jako kandidáta pro uložení datumů z píchaček (díky nočním směnám totiž
můžete skončit práci jiný den, než jste ji začali). O zadávání platí
to, co bylo řečeno výše. V databázi zabírá osm bajtů místa.
Na tomto místě se sluší podotknout, že MySQL má rovněž k dispozici
celou řadu funkcí pro práci s datem a časem. Povíme si o nich později v
našem seriálu; teď jen naznačím, že takové funkce umějí datumy sčítat,
testovat, zda událost je v nějakém intervalu, konvertovat a podobně.
Typ Year
Přizám se, že datový typ YEAR jsem až doposud neznal. Slouží pro
uložení roku, a to buď jako dvojciferné, nebo jako čtyřciferné číslo.
Pokud je číslo dvojciferné, může nabývat hodnot od nuly do 99, přičemž
69=2069, ale 70=1970. Čtyřmístná varianta ukládá roky od 1901 do 2155.
Docela by mě zajímalo, jestli někdo tuhle kulišárnu používate; kdyžtak
můžete přispět do diskuse.
Unixové časové razítko
MySQL má velmi dobrou podporu, pokud jde o výpočty s unixovými
časovými razítky. Unix-timestamp, jak samozřejmě víte, reprezentuje
počet sekund uplynulých od půlnoci 1.1.1970 a MySQL umí převádět jak
klasické datumy na unix-timestampy, tak i naopak. Skutečně jsem viděl
aplikace, které všechny datumy ukládaly jako unixová časová razítka.
Typ Timestamp
Timestamp jsem si nechal nakonec. Ukládá do databáze informace o
tom, kdy byl daný řádek založen nebo aktualizován. Timestampy mohou
nabývat hodnot od 1.1.1970 do 31.12.2037 a v databázi zabírají 4 bajty
místa. Jejich chování se v posledních verzích MySQL dost měnilo, takže
pokud chcete timestampy používat, prostudujte si dokumentaci.
MySQL, datumy a praxe
Z čistě praktického hlediska bych při používání datumů v MySQL
předložil čtenáři několik postřehů:
- MySQL NEKONTROLUJE, zda je zdadávané datum platné. MySQL pouze
kontroluje rozsah, tzn. například u datumů to, zda je mezi 1.1.1000 až
31.12.9999. MySQL tedy klidně zbaští například 31.4.2005 a nevyvolá ani
varování. Kontrola platnosti zadávaných datumů bude tedy vždy na straně
klienta. Jeví se mi to jako hotová katastrofa, protože MySQL neplatné
datum klidně uloží. Pozor na to, protože jiné DBMS se chovají jinak.
- MySQL v případě překročení rozsahu, jak už bylo uvedeno, uloží do
polí typu date, time a datetime speciální nulovou hodnotu. Jestliže
však budete s touto hodnotou pracovat pomocí ODBC, bude zkonvertována
na NULL. Osobně by mi bylo mnohem milejší, kdyby MySQL takovou hodnotu
nevložila a místo toho by vrátila chybu.
- Nespoléhejte na to, že MySQL je dost benevolentní co se týče
formátu zadávaného datumu nebo času. Může se to vymstít. V praxi to
řeším tak, že si v klientské aplikaci napíšu funkci, která datum jednak
zkontroluje (viz výše), a jednak zformátuje. Pak jej teprve pošlu
MySQL. Můžete si tak ušetřit mnoho nepříjemností, dělejte to tedy
rovněž.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|