Ich habe zwei Spalten in Tabellenbenutzern, registerDate and lastVisitDate
die aus dem Datetime-Datentyp bestehen. Ich möchte Folgendes tun.
- Setzen Sie den Standardwert für registerDate auf MySQL NOW ()
- Setzen Sie den Standardwert für lastVisitDate auf
0000-00-00 00:00:00
Anstelle von null, das standardmäßig verwendet wird.
Da die Tabelle bereits vorhanden ist und vorhandene Datensätze enthält, möchte ich die Tabelle ändern verwenden. Ich habe versucht, die beiden folgenden Codes zu verwenden, aber keiner funktioniert.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Es gibt mir Fehler: ERROR 1067 (42000): Invalid default value for 'registerDate'
Kann ich in MySQL den Standardwert für Datum und Uhrzeit auf NOW () setzen?
mysql
sql
datetime
mysql-error-1067
Ibrahim Azhar Armar
quelle
quelle
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
. Sie haben dasdata type
Feld in beiden Ihrer Bemühungen nicht definiertDATE
mit Standardwert funktionieren sollteNOW()
Antworten:
Ab MySQL 5.6.5 können Sie den
DATETIME
Typ mit einem dynamischen Standardwert verwenden:Oder kombinieren Sie beide Regeln:
Referenz:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
Vor 5.6.5 müssen Sie den
TIMESTAMP
Datentyp verwenden, der automatisch aktualisiert wird, wenn der Datensatz geändert wird. LeiderTIMESTAMP
kann pro Tabelle nur ein automatisch aktualisiertes Feld vorhanden sein.Siehe: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Wenn Sie verhindern möchten, dass MySQL den Zeitstempelwert auf aktualisiert
UPDATE
(sodass er nur aktiviert wirdINSERT
), können Sie die Definition wie folgt ändern:quelle
DATETIME
wird oft bevorzugt, um den Bereich zu machen, den es halten kann: '1000-01-01 00:00:00' bis '9999-12-31 23:59:59' im Vergleich zuTIMESTAMPS
's' 1970-01-01 00: 00:01 'UTC bis' 2038-01-19 03:14:07 'UTC. Zum Beispiel zum Speichern von Geburtsdaten oder etwas mehr als 30 Jahren in der Zukunft.timestamp
dieses Verhalten ab MySQL 5.6Ich verwende einen Trigger als Problemumgehung, um ein Datum / Uhrzeit-Feld für neue Einfügungen auf NOW () zu setzen:
Es sollte auch für Updates funktionieren
Die Antworten von Johan & Leonardo beinhalten die Konvertierung in ein Zeitstempelfeld. Obwohl dies für den in der Frage dargestellten Anwendungsfall (Speichern von RegisterDate und LastVisitDate) wahrscheinlich in Ordnung ist, handelt es sich nicht um eine universelle Lösung. Siehe Frage zu Datum / Uhrzeit und Zeitstempel .
quelle
use a timestamp
ist eine dumme Problemumgehung, wenn Sie den Unterschied zwischen diesen beiden Datentypen wirklich kennen.Meine Lösung
quelle
TIMESTAMP
Säule. Niemand fragte nachTIMESTAMP
...EUREKA !!!
Für alle, die den Mut verloren haben, einen Standardwert für DATETIME in MySQL festzulegen , weiß ich genau, wie Sie sich fühlen. Hier ist es also:
Beachten Sie sorgfältig, dass ich keine einfachen Anführungszeichen / doppelten Anführungszeichen um die 0 hinzugefügt habe .
Wichtiges Update :
Diese Antwort wurde vor langer Zeit veröffentlicht. Damals funktionierte es bei meiner (wahrscheinlich neuesten) Installation von MySQL und ich wollte es teilen. Bitte lesen Sie die folgenden Kommentare, bevor Sie sich für diese Lösung entscheiden.
quelle
In MySQL 5.6-Dokumenten heißt es, dass CURRENT_TIMESTAMP als Standard für die Datentypen TIMESTAMP und DATETIME verwendet werden kann:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
quelle
In den Versionen MySQL 5.6.5 und höher können Sie genaue Datumsangaben verwenden und auch Standardwerte festlegen. Es gibt jedoch ein subtiles Bit, das darin besteht, den Genauigkeitswert sowohl an den Dataufruf datetime als auch an den Funktionsaufruf NOW () zu übergeben.
Dieses Beispiel funktioniert:
Dieses Beispiel funktioniert nicht:
quelle
Kann verwendet werden, um den Zeitstempel beim Update zu aktualisieren.
quelle
Am besten verwenden Sie "DEFAULT 0". Andere Weise:
quelle
Dies funktionierte bei mir mit MySQL:
quelle
Endlich hat das bei mir funktioniert!
quelle
quelle
Ich bin mir nicht sicher, ob dies noch aktiv ist, aber hier geht es weiter.
In Bezug auf das Setzen der Standardeinstellungen auf Now () sehe ich dies für den Datentyp DATETIME nicht als möglich an. Wenn Sie diesen Datentyp verwenden möchten, legen Sie das Datum für die Einfügung wie folgt fest:
Meine Version von mySQL ist 5.5
quelle
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Das hat bei mir funktioniert - ich habe gerade INSERT für meine Tabelle in UPDATE geändert.
quelle