Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso definir o valor padrão de um campo como '0000-00-00 00:00:00'?


Causa do erro:o modo SQL

Você pode definir o valor padrão de um DATE , DATETIME ou TIMESTAMP campo para o valor especial "zero" de '0000-00-00' como data fictícia se o modo sql permitir. Para versões do MySQL inferiores a 5.7.4, isso é regido pelo modo NO_ZERO_DATE, veja este trecho do documentação :

Além disso, o modo estrito deve ser ativado para não permitir valores "zero":

A partir de MySQL 5.7.4 isso depende apenas do modo estrito:

Verifique a versão e o modo SQL

Portanto, você deve verificar sua versão do MySQL e o modo SQL do seu servidor MySQL com
SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

Ative o INSERT

Você pode definir o sql_mode para sua sessão com SET sql_mode = '<desired mode>'
SET sql_mode = 'STRICT_TRANS_TABLES';   

Intervalo válido para DATETIME

O intervalo suportado para DATETIME é
[1000-01-01 00:00:00] to ['9999-12-31 23:59:59'], 

então o valor mínimo válido de DATETIME é '1000-01-01 00:00:00'.
Eu não recomendaria usar esse valor.

Observação adicional

Desde o MySQL 5.6.5 todos os TIMESTAMP e DATETIME colunas podem ter o comportamento mágico (inicializando e/ou atualizando), não apenas TIMESTAMP e apenas uma coluna, consulte Inicialização e atualização automáticas para TIMESTAMP e DATETIME :

Você pode alterar sua instrução CREATE TABLE no caso do MySQL 5.6.5 ou mais recente para:
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.';