[+/-]
Datentypen für Datum und Uhrzeit erlauben die Darstellung
zeitlicher Werte. In diese Kategorie fallen die Typen
DATETIME
, DATE
,
TIMESTAMP
, TIME
und
YEAR
. Jeder zeitbezogene Typ hat einen Bereich
zulässiger Werte sowie einen „Nullwert“, der
verwendet werden kann, wenn Sie einen unzulässigen Wert angeben,
den MySQL nicht darstellen kann. Der Typ
TIMESTAMP
unterstützt ein spezielles Verhalten
der automatischen Aktualisierung, welches im weiteren Verlauf
beschrieben werden wird. Informationen zu den
Speicheranforderungen zeitbezogener Typen finden Sie in
Abschnitt 11.5, „Speicherbedarf von Spaltentypen“.
MySQL gibt Warnungen oder Fehler aus, wenn Sie einen unzulässigen
Wert einzufügen versuchen. Indem Sie den passenden SQL-Modus
wählen, können Sie genauer festlegen, welche Datenarten MySQL
unterstützen soll. (Siehe auch
Abschnitt 5.2.5, „Der SQL-Modus des Servers“.) Wenn Sie etwa den Modus
ALLOW_INVALID_DATES
verwenden, akzeptiert MySQL
auch bestimmte irreale Daten wie '1999-11-31'
.
Dies ist praktisch, wenn Sie einen „möglicherweise
falschen“ Wert, den ein Benutzer eingegeben hat (z. B. in
ein Webformular), für die zukünftige Verarbeitung in der
Datenbank speichern wollen. In diesem Modus überprüft MySQL
lediglich, ob der Monat im Bereich zwischen 0 und 12 und der Tag
im Bereich zwischen 0 und 31 liegt. Diese Bereiche umfassen
deswegen die Null, weil MySQL in DATE
- oder
DATETIME
-Spalten auch die Speicherung von
Datumsangaben gestattet, bei denen der Tag oder der Monat und der
Tag null sind. Dies ist recht nützlich bei Anwendungen, die ein
Geburtsdatum speichern sollen, das Sie nicht genau kennen. In
diesem Fall speichern Sie das Datum einfach als
'1999-00-00'
oder
'1999-01-00'
. Wenn Sie Datumsangaben auf diese
Weise speichern, können Sie nicht davon ausgehen, für Funktionen
wie DATE_SUB()
oder DATE_ADD
korrekte Ergebnisse zu erhalten, denn diese erfordern
vollständige Datumsangaben. (Wenn Sie Nullen in Daten
nicht erlauben wollen, können Sie den
SQL-Modus NO_ZERO_IN_DATE
aktivieren.)
MySQL gestattet ferner die Speicherung von
'0000-00-00'
als „Pseudodatum“
(hierfür darf der SQL-Modus NO_ZERO_DATE
jedoch nicht aktiv sein). Dies ist in bestimmten Fällen bequemer
(und benötigt zudem weniger Speicher für Daten und Indizes) als
die Verwendung von NULL
-Werten.
Es folgen einige Gesichtspunkte, die Sie bei der Arbeit mit Datentypen für Datum und Uhrzeit beachten sollten:
MySQL ruft Werte für einen Datentyp für Datum und Uhrzeit in einem Standardausgabeformat ab, versucht aber eine Vielzahl von Eingabewertformaten zu verarbeiten, die von Ihnen eingegeben wurden (z. B. wenn Sie einen Wert angeben, der einem zeitbezogenen Typ zugewiesen oder mit diesem verglichen werden soll). Nur die in den folgenden Abschnitten beschriebenen Formate werden unterstützt. Es wird erwartet, dass Sie zulässige Werte angeben. Wenn Sie Werte in anderen Formaten angeben, können unvorhersehbare Ergebnisse die Folge sein.
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 70 und 99 werden als
1970-1999
interpretiert.
Jahreszahlen im Bereich zwischen 00 und 69 werden als
2000-2069
interpretiert.
Zwar versucht MySQL, Werte in verschiedenen Formaten zu
interpretieren, aber Datumsangaben müssen immer in der
Reihenfolge Jahr, Monat, Tag angegeben werden (z. B.
'98-09-04'
); die Reihenfolge Monat, Tag,
Jahr ('09-04-98'
) oder die im
deutschsprachigen Raum verwendete Reihenfolge Tag, Monat, Jahr
('04-09-98'
) werden nicht unterstützt.
MySQL konvertiert Werte eines zeitbezogenen Typs automatisch in eine Zahl, wenn der Wert in einem numerischen Kontext verwendet werden soll (und umgekehrt).
Wenn MySQL auf einen zeitbezogenen Wert trifft, der außerhalb
des zulässigen Bereichs liegt oder für den betreffenden Typ
anderweitig ungültig ist, wird dieser in den
„Nullwert“ des betreffenden Typs umgewandelt.
Eine Ausnahme liegt bei TIME
-Werten
außerhalb des gültigen Bereichs vor: Diese werden auf den
entsprechenden Endpunkt des TIME
-Bereichs
gesetzt.
Die folgende Tabelle zeigt das Format der
„Nullwerte“ für die einzelnen Typen. Beachten
Sie, dass die Verwendung dieser Werte Warnungen erzeugt, wenn
der SQL-Modus NO_ZERO_DATE
aktiviert ist.
Datentyp | „Nullwert“ |
DATETIME |
'0000-00-00 00:00:00' |
DATE |
'0000-00-00' |
TIMESTAMP |
'0000-00-00 00:00:00' |
TIME |
'00:00:00' |
YEAR |
0000 |
Die „Nullwerte“ sind zwar speziell, aber Sie
können sie speichern oder explizit referenzieren, indem Sie
die Werte in der Tabelle verwenden. Alternativ können Sie
dies auch unter Verwendung der Werte '0'
oder 0
tun, die einfacher zu schreiben
sind.
„Nullwerte“ für Datum und Uhrzeit, die über
MyODBC verwendet werden, werden ab MyODBC 2.50.12 automatisch
zu NULL
konvertiert, da ODBC mit solchen
Werten nicht umgehen kann.
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.