phpbar.de logo

Mailinglisten-Archive

[php] [1/2 OT] Datum und Zeit in MySQL

[php] [1/2 OT] Datum und Zeit in MySQL

Yannik Hampe yannik at cipher-code.de
Die Nov 27 16:28:15 CET 2007



Hannes H. wrote:
> Hallo Leute!
> 
> Bisher habe ich Datum und Datum+Zeit immer als Unix Time Stamp in ein
> herkömmliches INT-Feld der Datenbank gespeichert.
> 
> Da es aber auch spezialisierte Date und Time-Feld-Typen in MySQL gibt,
> stellt sich für mich die Frage: Ist es sinnvoller Datum und Zeit in
> diese Felder zu schreiben? Der Vorteil vom normalen Intager wäre, dass
> ich weiß, dass ich immer einen Time Stamp zurück bekomme und den dann
> entsprechend behandeln kann/muss.
> 
> Wie haltet ihr das in euren Applikationen?

Früher habe ich immer die Datenfelder Datetime oder timestamp genommen. 
Mittlerweile bin ich jedoch davon abgekommen und verwende lieber 
einfache INTs.
Es kommt allerdings natürlich darauf an, was du damit vor hast. Wenn du 
willst, dass sich ein timestamp bei jedem UPDATE-Aufruf auch immer 
aktualisiert, dann ist der Datentyp timestamp das richtige für dich. 
Wenn du das nicht willst, kann der Datentyp extrem nerven, weil du dann 
sowas wie
UPDATE ts=ts,...
in jedem Query haben musst. Dabei ist es eigentlich gerade Sinn der 
Sache, dass man sich sowas sparen kann. Ich meine man kann dieses 
automatisch Anpassen auch abstellen (zu lange her, dass ich mich damit 
beschäftigt habe ;-)), aber das macht sie Sache nur noch komplizierter, 
weil du am Datentyp nichtmehr erkennen kannst, wie er sich verhält.

Mein Grund mich für INTs zu entscheiden war jedoch, dass ich mit 
date_default_timezone_set eine konfigurierte Zeitzone einstelle, die 
dazu führt, dass phps Datumsfunktionen auch automatisch die Zeitzone 
umrechnen (wichtig, wenn ich zum Beispiel date() aufrufe). Ausserdem 
habe ich eine konfigurierbare Zeitsyntax in der Syntax wie data() sie 
fordert. Da ich nicht alle meine Daten zwangsweise aus einer DB hole, 
muss ich mich zwangsweise damit beschäftigen, wie ich mit Daten in php 
umgehe. Aber gleichzeit dann noch gewisse Operationen von der DB machen 
zu lassen kann ich mir auch sparen, wenn ich meine timestamps einfach 
als INT speichere. Sonst müsste ich auch für DATE_FORMAT noch die Syntax 
speichern etc. etc...
Und wenn ich mal zum debuggen an die DB gehe und nur mit dem 
mysqlquerybrowser da stehe, dann kann ich immernoch
SELECT FROM_UNIXTIME(ts) FROM ...
verwenden um den timestamp menschenlesbar zu analysieren.
> 
> Liebe Grüße aus Wien,
> Hannes Halenka

Yannik

php::bar PHP Wiki   -   Listenarchive