Datum? – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Datum? – MySQL – Fórum – Programujte.comDatum? – MySQL – Fórum – Programujte.com

 

jozo
~ Anonymní uživatel
5 příspěvků
8. 9. 2007   #1
-
0
-

Zdravim,
dajme tomu ze mam tabulku takejto struktury

nadpis clanku | datum clanku | text clanku | id |

u toho datumu mam datovy typ Date, ako docielim toho aby mi sa mi do databazy zapisoval datum sam? napriklad ked pisem v konzoli jeden zaznam aby som ten datum tam nemusel zadvat rucne ale aby sa tam dal sam a aby zostal nezmeneny, jednoducho informacia kedy bol clanok vydany, este len zacinam s Mysql a mam v tom gulas zatial.

Nahlásit jako SPAM
IP: ...–
štěpán
~ Anonymní uživatel
126 příspěvků
9. 9. 2007   #2
-
0
-

Jsou dva způsoby, jak doplnit nějakou hodnotu. Buď pomocí defaultní hodnoty (nejčastěji sysdate, jméno přihlášeného uživatele atd.) nebo triggeru (ten bych volil u složitějších konstrukcí).

Nahlásit jako SPAM
IP: ...–
uzivatel
~ Anonymní uživatel
6 příspěvků
9. 9. 2007   #3
-
0
-

daj si datovy typ TIMESTAMP, ten dokaze pri vlozeni (INSERT) vygenerovat datum pri zapise. ten atribut sa vola tusim DEFAULT_TIMESTAMP()

Nahlásit jako SPAM
IP: ...–
jozo
~ Anonymní uživatel
5 příspěvků
9. 9. 2007   #4
-
0
-

dik, vyskusal som ten TimeStamp a funguje

Nahlásit jako SPAM
IP: ...–
Mautinek
~ Anonymní uživatel
408 příspěvků
9. 9. 2007   #5
-
0
-
Nahlásit jako SPAM
IP: ...–
Sopta
~ Anonymní uživatel
52 příspěvků
9. 9. 2007   #6
-
0
-

To Mautinek: Znam i jinou moznost. v PHP standartne napises radek:
$datum = Date(Y."-".m."-".d);
$cas = Date(H.":".i.":".s);
$datum_clanku = ($datum.$cas);

No a v MySQL pak :
datum_clanku VARCHAR(60)

A nemusite pouzivat zadne DATE atd. Vsechno funguje jak ma

Nahlásit jako SPAM
IP: ...–
Prog.
~ Anonymní uživatel
398 příspěvků
10. 9. 2007   #7
-
0
-

To Sopta: Vieš si predstaviť že máš tabuľku s tisíckami záznamov a každý má dátum vo varchare a ty chceš vypísať všetky z nejakého časového obdobie a ešte k tomu chronologicky zoradené ? Vieš si predstaviť ako sa pri tom MySQL namaká???
Dátové formáty na dátum a čas tam len pre srandu nie sú. Ak použiješ datetime/timestamp/... tak:
a) jednoduchsie pri programovani
b) podstatne menšie pamäťové naroky
c) optimalizované -> neporovnatelne rýchlejsie (indexovanie, vyhľadávanie, možnosť používať funkcie na prácu s datumom a časom)

Odporúčam naštudovať.


Nahlásit jako SPAM
IP: ...–
insider (nelze se prihlasit)
~ Anonymní uživatel
1 příspěvek
10. 9. 2007   #8
-
0
-

To Sopta: je pekne, ze chces poradit, ale prvni co me zarazil v tvem priklade je dvakrat volani funkce date() - proc, k cemu, to uz snad muzes dat do jednoho formatovaciho retezce, btw ted sem se podival a nechapave se stale divam na zapis Y."-".m."-".d, co to ma byt? se snad pise "Y-m-d" ...
dale varchar, to uz rekl prog nademnou, ale kdyz uz to chces jako retezec, tak potom char a delku 19(4 pro rok+2x pomlcka+2krat : + mezera + 5x dvojciferne cislo), proc zbytecne plytvat pameti a davat 60ti znakovy varchar(navic jeste varchar, tedy retezec s promennou delkou, kdyz to bude mit vzdy stejnou delku to datum...)
a jeste bych doplnil "uzivatele" - timestamp zmeni datum i pri editaci zaznamu, jednoduse uklada posledni zmenu zaznamu, coz je vlozeni take...

Nahlásit jako SPAM
IP: ...–
Sopta
~ Anonymní uživatel
52 příspěvků
10. 9. 2007   #9
-
0
-

Hmm. je zajimave ze me to funguje. A to pouziti Date se da samozrejme pouzit na jednom radku, ale napsal jsem to pro zprehledneni. no a VARCHAR se pouziva pro vice nez 5 znaky. Pokud pole nebude obsahovat pice jak 5 znaku tak se automatciky prevede na CHAR A jak se tam divam tak datum zabere vice nez pet znaku.

Nahlásit jako SPAM
IP: ...–
Sopta
~ Anonymní uživatel
52 příspěvků
10. 9. 2007   #10
-
0
-

No jinak receno kazdy programuje posvem. Ja programuju takhle.

Nahlásit jako SPAM
IP: ...–
Prog.
~ Anonymní uživatel
398 příspěvků
12. 9. 2007   #11
-
0
-

Sopta píše:#
# Hmm. je zajimave ze me to funguje. A to pouziti Date se da samozrejme pouzit na jednom radku, ale napsal jsem to pro zprehledneni. no a VARCHAR se pouziva pro vice nez 5 znaky. Pokud pole nebude obsahovat pice jak 5 znaku tak se automatciky prevede na CHAR A jak se tam divam tak datum zabere vice nez pet znaku.


http://dev.mysql.com/doc/refman/5.0/en/char.html

Rozdiel medzi char a varchar je podstatne iný a o automatických prevodoch z varchar na char som ešte nepočul :-) Teraz sa mi marí, že pri myisam ak použiješ jeden stĺpec varchar, tak zo všetkých char-ov sa stanu varchar-y (neumožňuje char aj varchar v jednej tabuľke) -- ale možno to je blbosť.

[podtrzene]hlavný rozdiel v skratke:[/podtrzene]

Char sa prehľadáva rýchlejšie, zato varchar zaberá menej miesta. Lenže je tiež pravda že menej dát skôr prezrieš. Takže si musíš uvedomiť, ktoré kedy použiť.

Ak máš stĺpec do ktorého dávaš stále rovnaký počet znakov, napr. výstupy z fcie. MD5() tak jednoznačne použi char(32), lebo sú stále dlhé 32 znakov. Vo varchar-e by použili rovnako veľa miesta (skoro), ale vyhľadávanie by bolo pomalšie.

Do varchar-u idú skôr dáta, ktoré majú rôzne dĺžky v rôznych riadkoch. Napr, ak by si stĺpec priezvisko dal na char(40) tak aj troj-znakové priezvisko by zaberalo 40B. Takže tu by pekne sadol varchar(40), kde by vošli aj dlhé dvoj slovné priezviska a troj-znakové priezvisko by zbytočne nezožralo 40B, ale len 3(+1)B.

[podtrzene]Jou, a späť k téme:[/podtrzene]
S varcharom to fungovať bude. S charom by to fungovalo rýchlejšie. Ešte rozumnejšie by bolo ukladať do DB dátum vo forme unsigned int ako výsledok funkcie time(). (vo forme unix_timestamp) Potom by sa dalo jednoducho chronologicky zoraďovať, rovnako ako so zoraďovaním čísel. Najrozumnejšie je však použiť dátový typ na to určený (DATE,TIME,DATETIME,TIMESTAMT,...), potom to pobeží najrýchlejšie, zožerie to najmenej pamäte čiže najmenej zaťaží server. Mysql vie s dátumami a časmi veľké veci tak podľa mňa nieje čo riešiť. http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

[podtrzene]Niečo proti použitiu určeného dátového formátu:[/podtrzene]
Kým sa človek naučí pracovať s Dátumami, tak si odskáče svoje, ja osobne som až neskôr pochopil že mysql pracuje aj s časovými pásmami (preto odporúčam ukladať všetko v GTM). Ak však do toho investuje trocha času, množstvo ďalšieho času ušetrí práve vďaka získaným schopnostiam...

Takže záver: Programuj ako chceš, to ti nikto neberie. Pre mňa je v programovaní aj kúsok umenia, programovať čo najdokonalejšie a najoptimálnejšie. Skratka tak, aby som nemusel každý týždeň kupovať nový HW, ktorý bude robiť zbytočne zložité algoritmy....

Nahlásit jako SPAM
IP: ...–
Sopta
~ Anonymní uživatel
52 příspěvků
13. 9. 2007   #12
-
0
-

To Prog.: Ano. no kje púravda ze me to stim DATETIME nefunguje, jeste jsem se nasd tim nezamyslel takze pouzivas VARCHAR :D

Nahlásit jako SPAM
IP: ...–
štěpán
~ Anonymní uživatel
126 příspěvků
13. 9. 2007   #13
-
0
-

Prog. píše:#
# Char sa prehľadáva rýchlejšie...


Asi záleži na konkrétních datech. Souhlasím s tím, že třeba integer se prohledává rychleji než char/varchar. Ale rozhodně nelze paušalizovat tvrzení, že char je rychlejší než varchar. Zkoušel jsem to na testovací tabulce - vytvořil jsem si nejdříve sloupec s typem char (ten idexoval) udělal dotaz, poté ten samý sloupec vytvořil jako varchar (také idexoval) a zkusil jsem další dotaz. Oba dva dotazy daly dle trace stejný výsledek.
V některých případech může optimalizátor vyhodnotit, že tabulka je příliš malá než aby prohledával index a vyplatí se ji načíst do bufferu celou (full-table scan). Nad Oraclem to jsou tuším 4 bloky (každý defaultně 8kB).

Jinak souhlasím s tím, že by se datum měl uchovávat jako DATE/DATETIME/TIMESTAMP apod. a v jednotlivých typech je velká síla. Kdo ho dá do jako textový řetězec by zasloužil kulku :-) protože můžou vznikat problémy s interpretací (co je 05/03/05? březen nebo květen?) a řazením. Zvláště pokud k tabulkám nebo databázovému API přistupují jiné aplikace :-/

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Datum — založil Bloodman

Dátum — založil Onsi

Datum — založil survik1

Dátum — založil jurinecko

Datum — založil x-flyer

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý