Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir la valeur par défaut d'un champ sur '0000-00-00 00:00:00' ?

Cause de l'erreur :le mode SQL

Vous pouvez définir la valeur par défaut d'une DATE , DATETIME ou TIMESTAMP champ à la valeur "zéro" spéciale de '0000-00-00' comme date factice si le mode sql le permet. Pour les versions de MySQL inférieures à 5.7.4, cela est régi par le mode NO_ZERO_DATE, voir cet extrait du documentation :

De plus, le mode strict doit être activé pour interdire les valeurs "zéro" :

Depuis MySQL 5.7.4 cela ne dépend que du mode strict :

Vérifier la version et le mode SQL

Vous devriez donc vérifier votre version de MySQL et le mode SQL de votre serveur MySQL avec

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

Activer l'INSERER

Vous pouvez définir le sql_mode pour votre session avec SET sql_mode = '<desired mode>'

SET sql_mode = 'STRICT_TRANS_TABLES';   

Plage valide pour DATETIME

La plage prise en charge pour DATETIME est

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

donc la valeur DATETIME minimale valide est '1000-01-01 00:00:00'.
Je ne recommanderais cependant pas d'utiliser cette valeur.

Remarque supplémentaire

Depuis MySQL 5.6.5, tous les TIMESTAMP et DATETIME les colonnes peuvent avoir le comportement magique (initialisation et/ou mise à jour), pas seulement TIMESTAMP et une seule colonne au maximum, voir Automatic Initialization and Updating for TIMESTAMP et DATETIME :

Vous pouvez modifier votre instruction CREATE TABLE dans le cas de MySQL 5.6.5 ou plus récent en :

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.';