piczu
16.04.2005, 22:00:26
robie szablon z obsluba newsow i zastanawiam sie jak mam uzyskiwac date w php abym mogl ja pozniej zapisac w MySQL, zauwazylem ze data w bazie nie jest jest zapisywana w formacie unix'owym. Moze mozna to jakos zmienic ?
Potrzebuje;
odczyt daty w php => zapis daty w mysql
odczyt daty w mysql => zapis daty w php
jak bedzie najprosciej ?
z gory dziekuje za pomoc.
SongoQ
16.04.2005, 22:04:31
W MySQLu masz timestamp, to jak bedziesz wyswietlal to juz jest Twoja sprawa, konwetujesz date do takiej postaci jaka Ci pasuje.
piczu
16.04.2005, 22:18:26
hmm u mnie data w mysql przedstawia sie tak : 20050416231406, zadeklarowane jako timestamp(14), ale to nic nie ma wspolnego z data w unix, ktora odlicza czas od 1970, no i nie moge jej uzyc do strftime albo cos podobnego.
SongoQ
16.04.2005, 22:22:37
Chodzilo mi o pole timestamp
piczu
16.04.2005, 22:27:57
aha czyli zrobic pole timestamp jak int ?
SongoQ
16.04.2005, 22:39:15
Tak wiekszosc baz danych posiada takie pole, jesli nie to pole data i wtedy podczas dodawnia i wyciagania z bazy konwertowanie. W Twoim przypadku uzyl bym timestampa
yavaho
16.04.2005, 22:40:47
Ja najczesciej przechowuje date w bazie MySQL w polu CHAR(10) w postaci sekundowej
<?php
//$data > zapis do bazy w postaci: CHAR(10)
//$row['data'] < odczyt z bazy
?>
piczu
16.04.2005, 22:48:33
jak dobrze licze to w char zajmuje ci to 10 bajtow a w int tylko 4.
SongoQ
16.04.2005, 22:49:00
@yavaho Wydaje mi sie ze to jest nie prawidlowe, poniewaz stworzono typy pol zeby trzymac odpowiednie danem, char jak nazwa wskazuje przechowywane sa dane, timestamp unixowy zapis czasu od wiadomo jakiej daty, format jest stalu i szybciej dziala przy wuciaganiu, inaczej struktura jest zorganizowana. Jesli trzymasz juz w bazie sekundy to lepiej uzyc inta. Kiedys dopadlem jakas ksiazeczke wlasie o typach pol i ich przeznaczeniu i autor podawal przyklady jak moze spasc szybkosc zapytania dla niewlasciwych uzyc pol, a wiadomo lepiej jak sie zapytanie wykonuje 0,50s niz 5s
yavaho
17.04.2005, 02:53:17
Dalem ten przyklad jako alternatywe do innych typow danych przechowywania daty w MySQL. Czasem taki sposob jest bardzo wygodny w dodatku zmiejsza ilosc przeprowadzanych operacji przez php, ale oczywiscie w konkretnych z gory zaplanowanych projektach. Ale znowu ten sposob wyklucza prawie calkowicie operacje przeprowadzane na dacie przez MySQL.
A co do ilosci zajetych bajtow to w tym przypadku jest to 10. Aby przechowac date w formacie sekundowym trzeba uzyc DATETIME (8 bajtow) lub TIMESTAMP (4 bajty) ale z ograniczeniem od 1970r. do 2037r. W INT nie pomiesci sie data w formacie sekundowym, trzeba uzyc BIGINT (8 bajtow).
Format CHAR nie jest idealnym rozwiazaniem jezeli chodzi o wydajnosc bazy danych, ale w pewnych przypadkach nie mozna znalezc innego wyjscia.
piczu
17.04.2005, 11:07:36
zrobilem przy pomocy inta i sa tez sekundy.int bez znaku jest z przedzialu 0 do 4 294 967 295 wiec nie ma problemu z tym do roku 2038

.
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.