SQL und arbeiten mit DATETIME

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SQL und arbeiten mit DATETIME

    Hallo. Ich beschäftige mich seit kurzem mit dem Typ DATETIME. Vorher habe ich immer den Timestamp in die Datenbank schreiben lassen.

    Also ich hätte 2 Frage.

    1. Wie kann ich ein anderes Datum als das jetzige in die Datenbank schreiben lassen. Wenn ich das jetzige will benutze ich ja NOW()
    Bastel ich mir einfach via date() und time() das ganze? Sprich

    Quellcode

    1. date("Y-d-m H:m:s",time()+3600*24) // datum heute + 1 Tag

    Oder gibt es da eine einfache Variante?


    Und 2.
    Wenn ich in der Datenbank z.b. 3 Werte habe:

    Quellcode

    1. 2009-02-10 12:56:34
    2. 2009-02-11 15:45:23
    3. 2009-02-12 18:24:12


    Kann ich meine WHERE Abfrage so gestallten, dass ich Fragen kann WHERE date='2009-02-10'
    Also das ich nur bestimmte Abschnitte abfragen kann. Weil die Uhrzeit ist für die Abfrage nicht wichtig. Aber das Datum schon.



    Ich habe die Suchfunktion bereits gequält..Nur leider nichts hilfreiches gefunden. Und aus dem Referenzhandbuch von mysql.com bin ich einfach nicht schlau geworden. Habe da schon recht lange gesucht.

    Danke im Vorraus.
  • kurze Frage. Warum hast du den Spaltentyp gewechselt?
    Timestamp benötigt 4 Byte - Datetime jedoch 8 Byte.
    Da man meistens nach Zeitstempeln sortiert legt man bestenfalls noch mindestens einen Index auf diese Spalte an. Zusammen mit einer JOIN Spalte vielleicht sogar mehr. Der Speicher wird also doppelt und dreifach belegt.

    Wenn du das Feld für historische Daten benötigst, bin ich natürlich zufrieden gestellt ;)
  • d0nut schrieb:

    Der Speicher wird also doppelt und dreifach belegt.


    Natürlich ist es sinnvoll das Optimum rauszuholen.
    Vor allem in Bezug auf Datentypen und Längen sich klar zu machen, welche Performance Auswirkungen das auf das gesamte System haben kann.
    Aber ich behaupte mal ganz frech, dass ein Normalverbraucher der mit MySQL "spielt" niemals dieses Level erreiche kann, dass man sich wegen Datentypen um die Performance und das System sorgen machen muss ;)

    Trotzdessen, hast du Recht, dass man bescheid wissen sollte, was man da tut, warum man es tut und welche Auswirkungen es hat, bzw. wie man auf einem anderen Weg das Optimum erreichen kann.
  • Oha danke an euch beide. Ich hatte vor in den nächsten Tagen das komplette Script umzuschreiben auf DATETIME. Ich habe bis jetzt nur zum glück wenige Scripte in der Administration umgestellt.

    Ich hatte jetzt schon öfters gelesen, dass das Arbeiten damit leichter ist und die Performance des Servers nicht so stark dadrunter leidet als wenn man den Timestamp in die Datenbank schreibt und beim auslesen dann "umwandelt".


    Das Arbeiten damit ist aber ja wirklich manchmal leichter. Beim Type DATETIME kann man die WHERE Abfragen leichter definieren finde ich.

    Sprich

    Quellcode

    1. WHERE DAY(datumsfeld)='2009'


    Wenn man jetzt den Timestamp in der Datenbank speichert kann man nicht so leicht damit arbeiten. Oder irre ich mich da?
    Ich habe dann immer mit LIKE gearbeitet und andere Methoden die Abfrage "schöner" zu gestalten konnte mit keiner damals während meinem Praktikum sagen.

    Deswegen war das eigentlich der Grund auf DATETIME umzusteigen.
  • Um die Verwechslungsgefahr nochmal klar zu stellen: PHP Timestamp sind Integer - SQL Timestamps sind einer "komplexer" Typ

    Wenn du SQL TIMESTAMPs verwendest hast du zwei zusätzliche Features im Vergleich zu DATETIME und INTEGER.
    * CREATE TABLE ... DEFAULT CURRENT_TIMESTAMP ...
    * "ON UPDATE CURRENT_TIMESTAMP"

    Datumsfunktionen wie DAY() lassen sich auf alle Datumstypen (also auch TIMESTAMP) anwenden.