CURRENT_TIMESTAMP kann in MySQL 5.5 nicht als Standarddatum verwendet werden


18

Ich kann keinen Current_timestampStandardwert festlegen . Meine MysqlVersion ist 5.5.47.

Abfrage ist

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

Bildbeschreibung hier eingeben

Während es gut funktioniert auf meiner lokalen DB mit mysql V5.6.56.


Das Problem ist auf Mikrosekunden zurückzuführen, die in den neuen mysql-Versionen als Standardwert hinzugefügt wurden. Siehe tekina.info/… für Lösungen.
Aniket Singh

Antworten:


25

Aus dem MySQL 5.5-Handbuch :

Sie können den Standardwert für eine Datumsspalte nicht auf den Wert einer Funktion wie NOW () oder CURRENT_DATE festlegen. Die Ausnahme besteht darin, dass Sie CURRENT_TIMESTAMP als Standard für eine TIMESTAMP-Spalte angeben können.

Daher funktioniert das, was Sie erreichen möchten, in MySQL 5.5, wenn Sie TIMESTAMPanstelle einer DATESpalte eine Spalte hinzufügen .

Die Änderungen in 5.6.x, die die Funktionalität ermöglichen, werden hier dokumentiert. Der Vollständigkeit halber zitiere ich die entsprechende Zusammenfassung:

Ab MySQL 5.6.5 können die Spalten TIMESTAMP und DATETIME automatisch initialisiert und auf das aktuelle Datum und die aktuelle Uhrzeit (dh den aktuellen Zeitstempel) aktualisiert werden. Vor 5.6.5 gilt dies nur für TIMESTAMP und höchstens für eine TIMESTAMP-Spalte pro Tabelle.


8

Überprüfen Sie diese Antwort .

Ihre Möglichkeiten sind:

  • Aktualisieren Sie auf MySQL 5.6.5
  • Ändern Sie den Spaltentyp in TIMESTAMP wie folgt:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • Erstellen Sie einen TRIGGER, der die Spalte automatisch aktualisiert:

    ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
                                                      -- NULLs or default
                                                      -- to a special value
    DROP TRIGGER IF EXISTS downloads_BI;
    DELIMITER //
    CREATE TRIGGER downloads_BI
    BEFORE INSERT ON downloads FOR EACH ROW
    BEGIN
        IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
            SET NEW.date = now();
        END IF;
    END//
    DELIMITER ;

    Möglicherweise möchten Sie auch einen Aktualisierungswert erstellen, wenn dieser beim Aktualisieren automatisch aktualisiert werden muss, oder um Nullwerte zu verhindern.

    mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM downloads;
    +------+---------------------+
    | i    | date                |
    +------+---------------------+
    |    1 | 2016-03-22 09:27:52 |
    +------+---------------------+
    1 row in set (0.00 sec)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.