Uns ist noch nie eine Datenbanktabelle untergekommen, in der kein Datum verwendet wird. Doch wo ist eigentlich der Unterschied zwischen den Typen die MySQL bietet?

  • DATE
  • DATETIME
  • TIMESTAMP
  • TIME
  • YEAR

DATE, TIME, YEAR erklärt sich von selbst, aber was ist der Unterschied zwischen DATETIME und TIMESTAMP?

Die MySQL Dokumentation sagt folgendes:

The DATETIME type is used when you need values that contain both date and time information. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is'1000-01-01 00:00:00' to '9999-12-31 23:59:59'.> The TIMESTAMP data type has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. It has varying properties, depending on the MySQL version and the SQL mode the server is running in. These properties are described later in this section.

Zunächst scheint es, als sei das Format identisch und dass DATETIME einen größeren Bereich hat. Wieso sollte man also TIMESTAMP verwenden? Einen Hinweis gibt ‘UTC’ in der Definition. Wieso wird TIMESTAMP in UTC gespeichert?

Nun, ein TIMESTAMP ist ein eindeutiger Zeitpunkt und muss auch auf der ganzen Welt eindeutig sein. Wenn ein Kollege von mir in New York ein Objekt in der Datenbank bearbeitet und speichert, möchte ich exakt wissen wie lange es her war, ohne dabei die Zeitzonen beachten zu müssen. Das Speichern in einer koordinierten Weltzeit hat also Sinn. Ein TIMESTAMP sollte also wirklich nur für ‘Zeitstempel’ benutzt werden, wie etwa modified_date, updated_date.

DATETIME hingegen repräsentiert ein einfaches Kalenderdatum oder einen Termin. Ein exakter Zeitpunkt (weltweit) ist dabei nicht entscheidend, wie zum Beispiel ein lokales Event oder ein Release Date ;). Diese Daten können und dürfen sich auch bei Bedarf ändern. Ein weiteres Beispiel sind Geburtstage. Hat jemand am 08.02.2011 Geburtstag, dann ist das überall so, auch wenn in manchen Ländern schon der 09. ist.

(via Stackoverflow)