Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Ungültiger Standardwert für Zeitstempel, wenn kein Standardwert angegeben ist.

Obwohl @jsnplank recht hat, dass Zeitstempel unterschiedlich behandelt werden und Sie die Verwendung des datetime-Datentyps für diese beiden bestimmten Spalten in Betracht ziehen sollten, erklärt er die Fehlermeldung nicht.

Die Fehlermeldung ist höchstwahrscheinlich das Ergebnis einer Kombination aus der Art und Weise, wie mysql Zeitstempelfelder behandelt, wenn kein Standardwert angegeben ist, und Ihren SQL-Moduseinstellungen.

  1. Sie definieren beide Timestamp-Spalten als nicht null, ohne dass ein bestimmter Standardwert festgelegt ist. Das bedeutet, dass der Standardwert der ersten Zeitstempelspalte current_timestamp() ist und auch auf current_timestamp() aktualisiert wird, wenn sich der Datensatz ändert. Deshalb erzeugt das 1. Zeitstempelfeld keine Fehlermeldung, egal welches der 2 das 1. ist.

    Der Standardwert der 2. Nicht-Null-Zeitstempelspalte ist jedoch '0000-00-00 00:00:00', wenn Sie nicht explizit einen Standardwert definieren.

    Siehe diesen Blogbeitrag für weitere Details .

  2. Wahrscheinlich no_zero_date Der SQL-Modus ist auch auf Ihrem Server entweder explizit oder als Teil des strikten SQL-Modus aktiviert. Dieser SQL-Modus generiert einen Fehler, wenn Sie '0000-00-00 00:00:00' als Standardwert festlegen oder diesen Wert in ein beliebiges Datumsfeld einfügen möchten.

Sie können also den Datentyp timestamp in Ihrer Tabelle verwenden, aber den zweiten entweder nullable machen oder 0 oder ein beliebiges gültiges Datum (z. B. die Epoche) als expliziten Standardwert angeben.

Da Sie mit diesen Feldern Start- und Enddaten markieren, ist es möglicherweise eine gute Idee, datetime anstelle von timestamp als Datentyp zu verwenden.