Portál AbcLinuxu, 10. května 2025 10:08

Dotaz: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00

7.7.2011 12:07 adrinko | skóre: 22
mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Přečteno: 417×
Odpovědět | Admin
zdravím priatelia,

prosím Vás, mám v tabuľke datetime v defaultnej podobe 0000-00-00 00:00:00. Čo sa stane, keď insertnem nový riadok s hodnotou napr. 2011/4/1 2:1:0? Zdá sa, že by to malo preformátovať mysql automaticky do podoby 2011-04-01 02:01:00, ale môžem sa na to plne spoľahnúť? Alebo by ste mi doporučili, aby som to preformátoval rovno v php skripte a radšej až následne insertoval do tabuľky?

vďaka vopred

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pavlix avatar 7.7.2011 13:13 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Odpovědět | | Sbalit | Link | Blokovat | Admin
MySQL při insertu nic do žádné textové podoby neformátuje, datum si ukládá ve svém interním formátu.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.7.2011 14:35 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
v každom prípade som to odskúšal a formát 2011/4/1 2:1:0 zapíše do db automaticky ako 2011-04-01 02:01:00. takže asi sú to ekvivalenty
7.7.2011 15:15 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Ale toš!
Přečtěte si vám bylo níže doporučeno
A jukněte na výpis příkazu SHOW VARIABLES LIKE '%\_format';
Jedna věc je, že MySQL bere na vstupu jako delimiter více znaků (až skoro cokoliv), druhá jak se to zapíše vnitřně a poslední jak Vám to servíruje (jak je to nastaveno) - jsou to tři různé věci.
Prostě vám ten datum dá jakoby příkazem DATE_FORMAT('20001224102030',@@datetime_format).
Ale nic Vám nezaručuje, že vždy a všude je výstupní formát datumu takto nastaven.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.7.2011 15:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Jo a doporučil bych to naformátovat vstup předem, tj. u Vás v PHP :).
na YYYY-MM-DD HH:MM:SS nebo YYYYMMDDHHMMSS, případně na YYYY-MM-DDTHH:MM:SS.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.7.2011 15:43 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
vďaka, prečítal som si ten odkaz smerujúci na mysql web. avšak podľa toho, čo je tam napísané by som povedal, že netreba v php prevádzať datetime do formátu 0000-00-00 00:00:00 nakoľko mysql si to sama v tomto formáte uloží do tabuľky. inak v php som na to použil
date("Y-m-d H:i:s", strtotime('2011/7/19 2:1:0'));
ale aj tak si myslím, že je to zbytočný krok, prevádzať to takto v php.
pavlix avatar 7.7.2011 16:35 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
v každom prípade som to odskúšal a formát 2011/4/1 2:1:0 zapíše do db automaticky ako 2011-04-01 02:01:00. takže asi sú to ekvivalenty

Jako bych mluvil do zdi.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.7.2011 19:19 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Jako bych mluvil do zdi.
No dobre teda, tak ako je potom možné, že je to v databáze uložené v tom správnom formáte Y-m-d H:i:s? Nemluvte do zdi a skúsme tomu radšej prísť na kobylku. pozerám sa na to veľmi zjednodušene tak, že keď to mysql hodí do toho správneho formátu, tak na čo by som tam mal pchať ešte krok s php skriptom, ktorý by to tak či tak predpripravil do toho správneho formátu? skúste mi to vysvetliť
7.7.2011 20:15 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Moje levná 1/3 mě fčil říkala, že to je jako „házet perly sviním“. :-), ale ještě to zkusím:
Do databáze se Vám to uloží ve formátu tak, jak to má databáze vnitřně zařízeno (nejsem si jistý ale mám dojem, že u tohoto typu je to v MySQL jako dva 32bit integery Rok×10000 + Měsíc×100 + den a hodiny×10000 + minuty×100 + sekundy).
A MySql akceptuje jako separátor i znak '/' proto to sežere, jako vstup, jestli se na to chete spoléhat, tak můžete, zatím, je to popsáno v manuálu, takže by to mělo být závazné chování.
Nevím jestli je formát Y-m-d H:i:s správný (já ho mám rád, ale ÚJČ ne :-)), ale je to defaultní výstupní formát MySQL, který si můžete změnit.

tak na čo by som tam mal pchať ešte krok s php skriptom
už jen proto, že každý vstup by měl být ošetřený ... 90% programování je ošetřování vstupů :-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.7.2011 21:30 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
no sláva! konečne sa mi rozvidnieva :-) (občas to hold trochu trvá) myslíte, že ten ktok s php skriptom som tam napísal správne? alebo je nejaké vhodnejšie spracovanie na to v php? síce som to otestoval a funguje ten php skript ok, ale ak by bolo nejaké vhodnejšie riešenie, sem s ním :-) ďakujem za vašu trpezlivosť
7.7.2011 22:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Nevím, ten Váš zápis date-time je dost zvláštní, odkud se to bere?
Aby jste pak nebyl překvapený jako třeba tímto:
echo date("Y-m-d H:i:s",strtotime("11/8/15 1:2:3"));
Fce strtotime() z tohoto pohledu dělá co může, aby z toho nějaký datum a čas dostala, z tohoto pohledu je snad lepší to poslat do db (třeba přes mysqli::real_escape_string() ), kde je to v tomto případě striktnější.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.7.2011 22:43 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
odkud se to bere?
iný php skript (ku ktorému nemám prístup) v tomto formáte predáva dáta môjmu skriptu.
pokiaľ by to bolo vo formáte, ktorý ste uviedli, t.j. 11 namiesto 2011, tak to by mohol nastať problém. našťastie je ale rok vždy štvorciferný.
7.7.2011 22:57 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
No asi bych si napsal fci verifikující datum a převádějící na DB formát.
Lze to parsovat a zjistit platnost data (a času taky) třeba s využitím fce checkdate().
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.7.2011 23:54 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
áno, to by šlo, vďaka, popremýšľam o tom ešte
7.7.2011 14:07 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: mysql - automatické naformátovanie datetime do podoby 0000-00-00 00:00:00
Odpovědět | | Sbalit | Link | Blokovat | Admin
Viz tady.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.