Nie lubię się powtarzać ale jednak: wiecie że nie lubię mówić o oczywistych oczywistościach a tym bardziej pisać ;P
Ale faktycznie, po wpisie Tomka o polach timestamp w MySQL zauważyłem, że nigdy nie poruszyłem tego tematu.
Dlatego na szybko podam Wam argumenty dlaczego lepiej korzystać w MySQL z pól int do zapisywania czasu niż timestamp lub datetime:
- liczbą łatwiej operować, a cały świat uniksowy posługuje się znacznikiem czasu który jest liczbą
- szybciej, bez dodatkowych nakładów odejmiemy czy dodamy dwie daty w postaci liczby
- przy zmianie maszyny nie musimy się zastanawiać nad żadnymi formatami, lokalizacjami itp. int jest int-em dzięki temu o wiele łatwiej wyświetlić nam dowolną datę w oparciu o int
Bardziej techniczne:
- int zajmuje mniej miejsca w bazie (4 bajty dla int, 8 bajtów dla datetime, 4 bajty dla timestamp; manual)
- pobranie z bazy danych jest o wiele szybsze jeśli to pola liczbowe, niż czasowe (~5x szybsze niż timestamp; baza nie musi tyle myśleć)
Jeśli już zaczniemy korzystać z int, nie używajcie przypadkiem w zapytaniach funkcji dot. czasu bo są mało wydajne (np. UNIX_TIMESTAMP()).
Własne sprawdzanie tych „teorii” robiłem lata temu. Dla ciekawskich polecam chociażby benchmark jaki zrobił ntavares w 2009 roku.
Jeśli bardzo chcecie mieć już w bazie datę (np. spora część logiki jest w niej, a nie aplikacji) bardziej polecam typ datetime, który przy odczycie jest jakiś 2x szybszy od timestamp.