Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso impostare il valore predefinito di un campo come '0000-00-00 00:00:00'?

Causa dell'errore:la modalità SQL

Puoi impostare il valore predefinito di un DATE , DATETIME o TIMESTAMP campo al valore speciale "zero" di '0000-00-00' come data fittizia se la modalità sql lo consente. Per le versioni di MySQL precedenti alla 5.7.4 questa è regolata dalla modalità NO_ZERO_DATE, vedere questo estratto del documentazione :

Inoltre, la modalità rigorosa deve essere abilitata per non consentire i valori "zero":

A partire da MySQL 5.7.4 questo dipende solo dalla modalità rigorosa:

Verifica versione e modalità SQL

Quindi dovresti controllare la tua versione di MySQL e la modalità SQL del tuo server MySQL con

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

Abilita l'INSERTO

Puoi impostare sql_mode per la tua sessione con SET sql_mode = '<desired mode>'

SET sql_mode = 'STRICT_TRANS_TABLES';   

Intervallo valido per DATETIME

L'intervallo supportato per DATETIME è

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

quindi il valore DATETIME minimo valido è '1000-01-01 00:00:00'.
Non consiglierei di utilizzare questo valore.

Nota aggiuntiva

Da MySQL 5.6.5 tutti i TIMESTAMP e DATETIME le colonne possono avere il comportamento magico (inizializzazione e/o aggiornamento), non solo TIMESTAMP e una sola colonna al massimo, vedere Inizializzazione e aggiornamento automatici per TIMESTAMP e DATETIME :

È possibile modificare l'istruzione CREATE TABLE nel caso di MySQL 5.6.5 o versioni successive 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.';