krzywy36
18.02.2011, 14:17:17
jw. jak przechowywać datę w bazie mysql? datetime, timestamp a może osobno - date i time? Która opcja jest najwydajniejsza i najwygodniejsza przy poźniejszych operacjach?
zordon
18.02.2011, 14:20:07
Opinii jest sporo, ale moim zdaniem najlepiej trzymać datę jako datetime - od tego jest. MySql ma sporo funkcji do obróbki, formatowania i porównywania dat. Ja bym nie kombinował w tej kwestii
greycoffey
18.02.2011, 15:53:30
Ja polecam przechowywanie daty w formacie uniksowym - int(11) i
time(). Łatwo porównywać a potem zawsze można sobie odpowiednią funkcją sformatować, by było czytelniej.
krzywy36
18.02.2011, 18:18:45
a jest jakaś funkcja php zamieniająca format datetime na ten zwracany przez time()?
tehaha
18.02.2011, 18:25:24
strtotime(), przechowuj w polach typu datetime lub timestamp, dodatkową zaletą jest, że można ustawić wartość domyślną CURRENT TIMESTAMP oraz ON UPDATE CURRENT TIMESTAMP i nie potrzeby przesyłania tego w zapytaniu
@greycoffey to nie jest dobry pomysł bo w ten sposób nie masz możliwości korzystania z funkcji mysql operujących na dacie
greycoffey
18.02.2011, 18:28:27
Ale za to mam przenośność i zawsze mogę sobie pooperować na sekundach
Spawnm
18.02.2011, 18:31:14
Tylko masz problem gdy chcesz wyświetlić wyniki z danego dnia czy miesiąca.
tehaha
18.02.2011, 18:35:42
jaką przenośność? funkcja strtotime() konwertuje datetime do uniksowego timestamp więc tak samo na tym operujesz, więc ta Twoja wygoda to niestety tylko iluzja spowodowana nieznajomością podstaw, powiedz mi jak na przykład pogrupujesz dane miesiącami przy takim formacie? Ponadto takim sposobem połowa z tych funkcji
http://dev.mysql.com/doc/refman/5.5/en/dat...unction_dayname jest dla Ciebie bezużyteczna
greycoffey
18.02.2011, 18:38:45
WHERE czas BETWEEN '.mktime(0,0,0,2,18,2011,0).' AND '.mktime(23,59,59,2,18,2011,0).'
To co do dnia^^.
Przenośność taką ma, że przy przechodzeniu na PgSQL nie muszę zapytań zmieniać. Przenośność nie znaczy użyteczność.
tehaha
18.02.2011, 18:52:08
nie chodziło mi o datę od-do, tylko o grupowanie po miesiącach, czego niestety nie wykonasz przy takim przechowywaniu, wiesz ja rozumiem, że niektórzy mają swoje nawyki ale to jest po prostu zły sposób, być może w prostych projektach nie robiło Ci to różnicy, ale kiedy przyjdzie Ci potrzeba wykonywania operacji na dacie to zrozumiesz, że to nie ma sensu
Sorka za odświeżenie wątku, ale sam jestem ciekaw jaki rodzaj pola wybrać dla daty... Zastanawiam się nad INT a wartość nie dawać z time() a z date("Ymdhis")...
Co Wy o tym sądzicie?
sebekzosw
2.10.2011, 11:00:58
Cytat
Wybór poprawnego typu daty/czasu
W MySQL-u istnieje pięć różnych typów daty i czasu:
DATE,
TIME,
TIMESTAMP,
DATETIME,
YEAR.
DATE podaje tylko datę z dokładnością do jednego dnia. TIME reprezentuje czas (ale nie datę) wraz z sekundami. DATETIME to data i czas z dokładnością do pojedynczych sekund. TIMESTAMP to liczba sekund od EPOCH, a YEAR to po prostu rok.
YEAR wymaga jednego bajta, jest więc najlepszy do zapisu samego roku.
DATE i TIME to najmniejsze typy daty/czasu, które wymagają jedynie 3 bajtów.
TIMESTAMP wymaga 4 bajtów.
DATETIME wymaga 8 bajtów.
W prawie każdym przypadku najlepiej jest używać TIMESTAMP, który podaje datę i czas z dokładnością do sekundy.
tutaj jest ciekawy artykuł:
http://webhosting.pl/Jak.wybrac.optymalny.....w.bazach.MySQL
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.