Die Typen DATETIME, DATE
        und TIMESTAMP gehören zusammen. In diesem
        Abschnitt werden ihre Eigenschaften sowie Gemeinsamkeiten und
        Unterschiede beschrieben.
      
        Den Typ DATETIME verwenden Sie, wenn Sie
        Werte benötigen, die sowohl ein Datum als auch eine Uhrzeit
        enthalten. MySQL ruft DATETIME-Werte im
        Format 'YYYY-MM-DD HH:MM:SS' ab und zeigt sie
        auch so an. Der unterstützte Bereich liegt zwischen
        '1000-01-01 00:00:00' und
        '9999-12-31 23:59:59'.
        („Unterstützt“ bedeutet hier, dass früher
        liegende Werte zwar funktionieren können, dies aber nicht
        garantiert ist.)
      
        Der Typ DATE erlaubt die Benutzung eines
        Datums ohne Zeitangabe. MySQL ruft DATE-Werte
        im Format 'YYYY-MM-DD' ab und zeigt sie auch
        so an. Der unterstützte Bereich liegt zwischen
        '1000-01-01' und
        '9999-12-31'.
      
        Der Datentyp TIMESTAMP schließlich hat je
        nach MySQL-Version und SQL-Modus des Servers verschiedene
        Eigenschaften, die im Verlauf dieses Abschnitts noch beschrieben
        werden.
      
        Sie können DATETIME-,
        DATE- und TIMESTAMP-Werte
        mit einem der folgenden gängigen Formate angeben:
      
            Als String im Format 'YYYY-MM-DD
            HH:MM:SS' oder 'YY-MM-DD
            HH:MM:SS'. Eine weniger strikte Syntax ist
            ebenfalls erlaubt: Ein beliebiges Interpunktionszeichen darf
            als Trennzeichen zwischen Datums- oder Zeiteinheiten benutzt
            werden. Beispielsweise sind '98-12-31
            11:30:45', '98.12.31 11+30+45',
            '98/12/31 11*30*45' und
            '98@12@31 11^30^45' gleichwertig.
          
            Als String im Format 'YYYY-MM-DD' oder
            'YY-MM-DD'. Eine weniger strikte Syntax
            ist auch hier erlaubt. Beispielsweise sind
            '98-12-31',
            '98.12.31', '98/12/31'
            und '98@12@31' gleichwertig.
          
            Als String ohne Trennzeichen in den Formaten
            'YYYYMMDDHHMMSS' oder
            'YYMMDDHHMMSS', sofern der String als
            Datum sinngebend ist. Zum Beispiel werden
            '19970523091528' und
            '970523091528' als '1997-05-23
            09:15:28' interpretiert, aber
            '971122129015' ist unzulässig (der
            Minutenanteil ist unsinnig) und wird deswegen zu
            '0000-00-00 00:00:00'.
          
            Als String ohne Trennzeichen in den Formaten
            'YYYYMMDD' oder
            'YYMMDD', sofern der String als Datum
            sinngebend ist. Zum Beispiel werden
            '19970523' und
            '970523' als
            '1997-05-23' interpretiert, aber
            '971332' ist unzulässig (der Tages- und
            der Minutenanteil sind unsinnig) und wird deswegen zu
            '0000-00-00'.
          
            Als Zahl in den Formaten YYYYMMDDHHMMSS
            oder YYMMDDHHMMSS, sofern die Zahl als
            Datum sinngebend ist. Beispielsweise werden sowohl
            19830905132800 als auch
            830905132800 als '1983-09-05
            13:28:00' interpretiert.
          
            Als Zahl in den Formaten YYYYMMDD oder
            YYMMDD, sofern die Zahl als Datum
            sinngebend ist. Beispielsweise werden sowohl
            19830905 als auch
            830905 als
            '1983-09-05' interpretiert.
          
            Als Ergebnis einer Funktion, die einen Wert zurückgibt, der
            im Kontext von DATETIME,
            DATE oder TIMESTAMP
            sinngebend ist, z. B. NOW() oder
            CURRENT_DATE.
          
        Unzulässige DATETIME-,
        DATE- oder TIMESTAMP-Werte
        werden in den „Nullwert“ des entsprechenden Typs
        umgewandelt ('0000-00-00 00:00:00' oder
        '0000-00-00').
      
        Bei als Strings angegebenen Werten, die Trennzeichen für
        Datumsbestandteile enthalten, ist es nicht erforderlich, zwei
        Stellen für Monats- oder Tageswerte anzugeben, die kleiner als
        10 sind. So wird etwa
        '1979-6-9' als
        '1979-06-09' ausgewertet. Ähnlich ist es bei
        als Strings angegebenen Werten, die Trennzeichen für
        Uhrzeitbestandteile enthalten, nicht erforderlich, zwei Stellen
        für Stunden-, Minuten oder Sekundenwerte anzugeben, die kleiner
        als 10 sind: '1979-10-30
        01:02:03' ist das Gleiche wie '1979-10-30
        1:2:3'.
      
        Als Zahlen angegebene Werte sollten eine Länge von 6, 8, 12
        oder 14 Stellen haben. Wenn eine Zahl 8 oder 14 Stellen lang
        ist, werden die Formate YYYYMMDD bzw.
        YYYYMMDDHHMMSS angenommen, wobei das Jahr
        durch die ersten vier Stellen angegeben wird. Umfasst die Zahl 6
        oder 12 Stellen, dann werden die Formate
        YYMMDD bzw. YYMMDDHHMMSS
        angenommen, wobei das Jahr durch die ersten beiden Stellen
        angegeben ist. Zahlen, die eine andere Länge aufweisen, werden
        so interpretiert, als ob sie am Anfang mit Nullen auf die
        nächste Länge aufgefüllt würden.
      
        Werte, die als Strings ohne Trennzeichen angegeben werden,
        werden entsprechend ihrer Länge interpretiert. Ist der String 8
        oder 14 Zeichen lang, dann wird angenommen, dass die ersten vier
        Zeichen das Jahr angeben. Andernfalls wird die Jahresangabe
        durch die ersten zwei Zeichen erwartet. Der String wird von
        links nach rechts interpretiert, als Reihenfolge wird Jahr,
        Monat, Tag, Stunde, Minute und Sekunde angenommen – je
        nachdem, wie viele Bestandteil im String vorhanden sind. Das
        bedeutet, dass Sie niemals Strings mit weniger als sechs Zeichen
        verwenden sollten. Wenn Sie beispielsweise
        '9903' angeben, um den März 1999
        darzustellen, dann fügt MySQL einen „Nullwert“
        für das Datum in Ihre Tabelle ein. Dies geschieht, weil die
        Jahres- und Monatsangaben 99 bzw.
        03 sind, der Tag aber vollständig fehlt: Der
        Wert ist kein gültiges Datum. Sie können jedoch ausdrücklich
        einen Wert Null zur Darstellung fehlender Monats- oder
        Tagesangaben spezifizieren. So können Sie etwa
        '990300' verwenden, um den Wert
        '1999-03-00' einzufügen.
      
Sie können bis zu einem gewissen Grad Werte eines Datumstyps einem Objekt zuweisen, welches von einem anderen Datumstyp ist. Allerdings kann es hierdurch zu Werteänderungen oder Datenverlust kommen:
            Wenn Sie einen DATE-Wert einem
            DATETIME- oder
            TIMESTAMP-Objekt zuweisen, wird die
            Uhrzeit des resultierenden Werts auf
            '00:00:00' gesetzt, da
            DATE diese Information nicht enthält.
          
            Wenn Sie einen DATETIME- oder
            TIMESTAMP-Wert einem
            DATE-Objekt zuweisen, wird die Uhrzeit
            des resultierenden Werts gelöscht, weil der Typ
            DATE diese Information nicht speichert.
          
            Beachten Sie, dass DATETIME-,
            DATE- und
            TIMESTAMP-Werte zwar alle in denselben
            Formatvarianten angegeben werden können, aber die Typen
            nicht dieselben Wertebereiche aufweisen. So kann ein
            TIMESTAMP-Wert nicht vor
            1970 und nicht nach
            2037 liegen. Das bedeutet, dass ein Datum
            wie '1968-01-01' zwar als
            DATETIME- und
            DATE-Wert zulässig, als
            TIMESTAMP-Wert jedoch illegal ist und
            deswegen zu 0 konvertiert wird.
          
Beachten Sie die folgenden Widrigkeiten bei der Angabe von Datumswerten:
            Das weniger strikte Format, welches die Angabe von Werten
            als Strings gestattet, kann heimtückisch sein. So sieht
            etwa ein Wert wie '10:11:12' wegen des
            als Trennzeichen verwendeten Doppelpunkts
            (‘:’) wie eine Uhrzeit aus,
            in einem Datumskontext wird er jedoch als
            '2010-11-12' interpretiert. Der Wert
            '10:45:15' wird zu
            '0000-00-00' konvertiert, weil
            '45' kein zulässiger Monat ist.
          
            Für den Server ist es erforderlich, dass Monats- und
            Tagesangaben gültig sind und sich nicht einfach nur in den
            Bereichen 1 bis 12 bzw. 1 bis 31 bewegen. Wenn der strikte
            Modus deaktiviert ist, werden ungültige Daten wie
            '2004-04-31' in
            '0000-00-00' umgewandelt, und es wird
            eine Warnung erzeugt. Ist der strikte Modus hingegen
            aktiviert, dann erzeugen ungültige Datumsangaben einen
            Fehler. Um derartige Daten zuzulassen, aktivieren Sie
            ALLOW_INVALID_DATES. Weitere
            Informationen finden Sie in
            Abschnitt 5.2.5, „Der SQL-Modus des Servers“.
          
Datumsangaben mit zwei Stellen für die Jahreszahl sind mehrdeutig, da das Jahrhundert unbekannt ist. MySQL interpretiert Werte mit zweistelligen Jahreszahlen gemäß den folgenden Regeln:
                Jahreszahlen im Bereich zwischen 00 und 69 werden als
                2000-2069 interpretiert.
              
                Jahreszahlen im Bereich zwischen 70 und 99 werden als
                1970-1999 interpretiert.
              
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

