Hinweis: Bei älteren
          MySQL-Versionen (vor 4.1) unterscheiden sich die Eigenschaften
          des Datentyps TIMESTAMP erheblich von dem,
          was in diesem Abschnitt beschrieben wurde. Wenn Sie ältere
          TIMESTAMP-Daten konvertieren müssen, damit
          sie in MySQL 5.1 funktionieren, lesen Sie in
          jedem Fall die einschlägigen Abschnitte im
          MySQL-Referenzhandbuch für die Versionen 3.23, 4.0
          und 4.1.
        
          TIMESTAMP-Spalten werden im selben Format
          angezeigt wie DATETIME-Spalten. Mit anderen
          Worten ist die Anzeigebreite auf 19 Zeichen festgesetzt, und
          das Format lautet YYYY-MM-DD HH:MM:SS.
        
          Der MySQL Server kann auch mit aktiviertem SQL-Modus
          MAXDB laufen. Wenn am Server dieser Modus
          aktiv ist, ist TIMESTAMP mit
          DATETIME identisch. Das bedeutet, dass,
          wenn dieser Modus zum Zeitpunkt der Erstellung einer Tabelle
          aktiviert ist, TIMESTAMP-Spalten als
          DATETIME-Spalten erstellt werden. Aufgrund
          dessen verwenden solche Spalten das
          DATETIME-Anzeigeformat und haben denselben
          Wertebereich, und es gibt keine automatische Initialisierung
          oder Aktualisierung auf die aktuellen Werte für Datum und
          Uhrzeit.
        
          Um den Modus MAXDB zu aktivieren, setzen
          Sie entweder den SQL-Modus des Servers beim Start mit der
          Serveroption --sql-mode=MAXDB auf
          MAXDB, oder Sie stellen die globale
          Variable sql_mode zur Laufzeit ein:
        
mysql> SET GLOBAL sql_mode=MAXDB;
          Ein Client kann den Server auch so einstellen, dass die eigene
          Verbindung im MAXDB-Modus läuft:
        
mysql> SET SESSION sql_mode=MAXDB;
          Beachten Sie, dass die Informationen im nachfolgenden
          Abschnitt nur für TIMESTAMP-Spalten in
          solchen Tabellen gelten, die nicht mit
          MAXDB als aktivem Modus erstellt wurden,
          weil solche Spalten als DATETIME-Spalten
          erstellt werden.
        
          MySQL akzeptiert keine Zeitstempelwerte, die eine Null in der
          Tages- oder Monatsspalte oder andere Werte enthalten, die kein
          gültiges Datum darstellen. Die einzige Ausnahme dieser Regel
          ist der Sonderwert '0000-00-00 00:00:00'.
        
          Bei der Bestimmung, wann die automatische
          TIMESTAMP-Initialisierung und
          -Aktualisierung erfolgen soll und welche Spalten dieses
          Verhalten aufweisen sollen, verfügen Sie über ausgesprochen
          viel Flexibilität:
        
              Für eine TIMESTAMP-Spalte in einer
              Tabelle können Sie den aktuellen Zeitstempel als
              Standardwert und Wert für die automatische Aktualisierung
              angeben. Es ist möglich, den aktuellen Zeitstempel als
              Vorgabewert für die Initialisierung der Spalte und/oder
              als Wert für die automatische Aktualisierung zu
              verwenden. Es ist jedoch nicht möglich, den aktuellen
              Zeitstempel als Vorgabewert für eine Spalte und als Wert
              für die automatische Aktualisierung einer anderen Spalte
              zu verwenden.
            
              Sie können festlegen, welche
              TIMESTAMP-Spalte sich automatisch
              initialisieren oder auf die aktuellen Werte für Datum und
              Uhrzeit setzen soll. Dies muss nicht unbedingt die erste
              TIMESTAMP-Spalte sein.
            
          Die folgenden Regeln bestimmen die Initialisierung und
          Aktualisierung von TIMESTAMP-Spalten:
        
              Wird ein DEFAULT-Wert für die erste
              TIMESTAMP-Spalte in einer Tabelle
              festgelegt, so wird dieser nicht ignoriert. Als Vorgabe
              kann CURRENT_TIMESTAMP oder ein
              konstanter Wert für Datum und Uhrzeit verwendet werden.
            
              DEFAULT NULL ist bei der
              ersten
              TIMESTAMP-Spalte dasselbe wie
              DEFAULT CURRENT_TIMESTAMP. Bei jeder
              anderen TIMESTAMP-Spalte hingegen wird
              DEFAULT NULL als DEFAULT
              0 behandelt.
            
              Jede einzelne TIMESTAMP-Spalte in einer
              Tabelle kann als diejenige benutzt werden, die mit dem
              aktuellen Zeitstempel initialisiert oder automatisch
              aktualisiert wird.
            
              In einer CREATE TABLE-Anweisung kann
              die erste TIMESTAMP-Spalte auf eine der
              folgenden Weisen deklariert werden:
            
                  Wenn sowohl DEFAULT
                  CURRENT_TIMESTAMP- als auch ON
                  UPDATE CURRENT_TIMESTAMP-Klauseln vorhanden
                  sind, dann hat die Spalte den aktuellen Zeitstempel
                  als Vorgabewert und wird automatisch aktualisiert.
                
                  Fehlen sowohl DEFAULT- als auch
                  ON UPDATE-Klausel, dann ist dies
                  das Gleiche wie DEFAULT CURRENT_TIMESTAMP ON
                  UPDATE CURRENT_TIMESTAMP.
                
                  Mit DEFAULT CURRENT_TIMESTAMP-,
                  aber ohne ON UPDATE-Klausel hat die
                  Spalte den aktuellen Zeitstempel als Vorgabewert, wird
                  jedoch nicht automatisch aktualisiert.
                
                  Ohne DEFAULT-, aber mit ON
                  UPDATE CURRENT_TIMESTAMP-Klausel hat die
                  Spalte den Standardwert 0 und wird automatisch
                  aktualisiert.
                
                  Bei einem konstanten DEFAULT-Wert
                  erhält die Spalte den angegebenen Standardwert. Wenn
                  die Spalte eine ON UPDATE
                  CURRENT_TIMESTAMP-Klausel hat, wird sie
                  automatisch aktualisiert, andernfalls nicht.
                
              Anders gesagt: Sie können den aktuellen Zeitstempel
              sowohl als Initialisierungs- als auch als
              Aktualisierungswert, als einen dieser beiden Werte oder
              gar nicht verwenden. (So können Sie beispielsweise
              ON UPDATE angeben, um die automatische
              Aktualisierung zu aktivieren, ohne dass die Spalte
              automatisch initialisiert werden müsste.)
            
              CURRENT_TIMESTAMP,
              CURRENT_TIMESTAMP() und
              NOW() können gleichermaßen in
              DEFAULT- und ON
              UPDATE-Klauseln verwendet werden. Sie alle haben
              die Bedeutung „aktueller Zeitstempel“.
            
              Die Reihenfolge der DEFAULT- und
              ON UPDATE-Attribute ist unerheblich.
              Wenn sowohl DEFAULT als auch
              ON UPDATE für eine
              TIMESTAMP-Spalte angegeben werden, kann
              das eine Attribut vor oder hinter dem anderen stehen. So
              sind beispielsweise die folgenden Anweisungen
              gleichwertig:
            
CREATE TABLE t (ts TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                             ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                             DEFAULT CURRENT_TIMESTAMP);
              Um für eine andere als die erste
              TIMESTAMP-Spalte die automatische
              Initialisierung oder Aktualisierung festzulegen, müssen
              Sie dieses Verhalten für die erste
              TIMESTAMP-Spalte unterdrücken. Dies
              tun Sie, indem Sie ihr explizit einen konstanten
              DEFAULT-Wert zuweisen (z. B.
              DEFAULT 0 oder DEFAULT
              '2003-01-01 00:00:00'). Nachfolgend gelten für
              die andere TIMESTAMP-Spalte dieselben
              Regeln wie für die erste; die einzige Ausnahme besteht
              darin, dass, wenn Sie sowohl DEFAULT
              als auch ON UPDATE weglassen, keine
              automatische Initialisierung oder Aktualisierung erfolgt.
            
So sind beispielsweise die folgenden Anweisungen gleichwertig:
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                  ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                  DEFAULT CURRENT_TIMESTAMP);
          Sie können die aktuelle Zeitzone für jede Verbindung separat
          einstellen (siehe Beschreibung in
          Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“).
          TIMESTAMP-Werte werden in UTC gespeichert;
          zur Speicherung werden sie aus der aktuellen Zeitzone
          konvertiert und beim Abrufen wieder in die aktuelle Zeitzone
          zurückkonvertiert. Solange die Zeitzoneneinstellung gleich
          bleibt, erhalten Sie denselben Wert zurück, den Sie auch
          gespeichert haben. Wenn Sie einen
          TIMESTAMP-Wert speichern, dann die Zeitzone
          ändern und den Wert abrufen, unterscheidet sich dieser
          abgerufene vom gespeicherten Wert. Grund hierfür ist die
          Tatsache, dass unterschiedliche Zeitzonen für die beiden
          Konvertierungsvorgänge benutzt wurden. Die aktuelle Zeitzone
          ist über den Wert der Systemvariablen
          time_zone verfügbar.
        
          Sie können das Attribut NULL in die
          Definition einer TIMESTAMP-Spalte
          einfügen, damit die Spalte auch NULL-Werte
          enthalten kann. Zum Beispiel:
        
CREATE TABLE t ( ts1 TIMESTAMP NULL DEFAULT NULL, ts2 TIMESTAMP NULL DEFAULT 0, ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP );
          Wenn das Attribut NULL nicht angegeben
          wurde und die Spalte auf NULL gesetzt wird,
          wird sie automatisch auf den aktuellen Zeitstempel umgestellt.
          Beachten Sie, dass eine TIMESTAMP-Spalte,
          die NULL-Werte gestattet, den aktuellen
          Zeitstempel nur unter einer der folgenden
          Bedingungen annimmt:
        
              Ihr Vorgabewert ist als
              CURRENT_TIMESTAMP definiert.
            
              NOW() oder
              CURRENT_TIMESTAMP werden in die Spalte
              eingefügt.
            
          Mit anderen Worten: Eine TIMESTAMP-Spalte,
          die als NULL definiert ist, wird nur dann
          automatisch aktualisiert, wenn sie unter Verwendung einer
          Definition wie der folgenden erstellt wurde:
        
CREATE TABLE t (ts TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP);
          Betrachten Sie im Unterschied dazu folgende Definition einer
          TIMESTAMP-Spalte, die
          NULL-Werte erlaubt, DEFAULT
          TIMESTAMP aber nicht verwendet:
        
CREATE TABLE t1 (ts TIMESTAMP NULL DEFAULT NULL); CREATE TABLE t2 (ts TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00');
In diesem Fall müssen Sie explizit einen Wert einfügen, der den aktuellen Werten für Datum und Uhrzeit entspricht. Zum Beispiel:
INSERT INTO t1 VALUES (NOW()); INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);
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.

