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

Wie kann ich den Standardwert eines Felds auf „0000-00-00 00:00:00“ setzen?

Fehlerursache:Der SQL-Modus

Sie können den Standardwert eines DATE festlegen , DATETIME oder TIMESTAMP auf den speziellen "Null"-Wert von '0000-00-00' als Dummy-Datum, wenn der SQL-Modus dies zulässt. Für MySQL-Versionen vor 5.7.4 wird dies durch den NO_ZERO_DATE-Modus geregelt, siehe diesen Auszug aus Dokumentation :

Zusätzlich muss der strikte Modus aktiviert werden, um "Null"-Werte zu verbieten:

Ab MySQL 5.7.4 dies hängt nur vom strikten Modus ab:

Version und SQL-Modus prüfen

Überprüfen Sie daher Ihre MySQL-Version und den SQL-Modus Ihres MySQL-Servers mit

SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

Einfügen aktivieren

Sie können den sql_mode für Ihre Sitzung mit SET sql_mode = '<desired mode>' festlegen

SET sql_mode = 'STRICT_TRANS_TABLES';   

Gültiger Bereich für DATETIME

Der unterstützte Bereich für DATETIME ist

[1000-01-01 00:00:00] to ['9999-12-31 23:59:59'], 

Der minimal gültige DATETIME-Wert ist also '1000-01-01 00:00:00'.
Ich würde jedoch nicht empfehlen, diesen Wert zu verwenden.

Zusätzlicher Hinweis

Seit MySQL 5.6.5 alle TIMESTAMP und DATETIME Spalten können das magische Verhalten haben (Initialisieren und/oder Aktualisieren), nicht nur TIMESTAMP und höchstens eine Spalte, siehe Automatische Initialisierung und Aktualisierung für TIMESTAMP und DATETIME :

Sie könnten Ihre CREATE TABLE-Anweisung im Fall von MySQL 5.6.5 oder neuer ändern in:

CREATE TABLE IF NOT EXISTS `article` (
  `article_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `url` VARCHAR(255) NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  `date_from` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured from a datetime.',
  `date_to` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured to a datetime.',
  `backdated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The manual datetime that is modified or input by the user.',
  `created_on` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The permanent datetime when the article is created.',
  `updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'The datetime when the article is updated on.',
  PRIMARY KEY (`article_id`, `parent_id`, `template_id`),
  UNIQUE INDEX `url_UNIQUE` (`url` ASC))
ENGINE = MyISAM
AUTO_INCREMENT = 66
COMMENT = 'Entity that holds the article with one-to-one properties.';