it-swarm.com.de

Das Standarddatum für CURRENT_TIMESTAMP in MySQL 5.5 kann nicht festgelegt werden

Ich kann Current_timestamp Nicht als Standardwert festlegen. Meine Mysql Version ist 5.5.47.

Abfrage ist

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

(enter image description here

Während es auf meiner lokalen Datenbank mit mysql V5.6.56 Gut funktioniert.

21
urfusion

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 eine TIMESTAMP -Spalte anstelle einer DATE -Spalte hinzufügen.

Die Änderungen in 5.6.x, die die Funktionalität ermöglichen, sind dokumentiert hier , und ich werde der Vollständigkeit halber die entsprechende Zusammenfassung zitieren:

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.

26
Philᵀᴹ

Überprüfen Sie diese Antwort .

Ihre Optionen sind:

  • Upgrade 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 Nullwerte verhindert werden sollen.

    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)
    
9
jynus