Em primeiro lugar, desculpe a todos se esta pergunta parece muito básica.
Eu tenho um banco de dados Wordpress e uma tabela wp_comments
.
Nesta tabela, tenho dois DATETIME
campos, cujo valor padrão é 0000-00-00 00:00:00
.
Eu preciso alterar esse valor para CURRENT_TIMESTAMP
, então por exemplo eu executo a seguinte consulta:
ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
Portanto, comment_date
(NOT comment_date_gmt
) é a coluna a ser modificada.
Agora, quando executo esta consulta, recebo o seguinte erro:
Error 1067: Invalid default value for comment_date_gmt
Por que isso está acontecendo? O que eu poderia fazer?
[ATUALIZAR]
Esta é a tabela:
CREATE TABLE `wp_comments` (
`comment_ID` bigint(20) UNSIGNED NOT NULL,
`comment_post_ID` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`comment_author` tinytext NOT NULL,
`comment_author_email` varchar(100) NOT NULL DEFAULT '',
`comment_author_url` varchar(200) NOT NULL DEFAULT '',
`comment_author_IP` varchar(100) NOT NULL DEFAULT '',
`comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_content` text NOT NULL,
`comment_karma` int(11) NOT NULL DEFAULT '0',
`comment_approved` varchar(20) NOT NULL DEFAULT '1',
`comment_agent` varchar(255) NOT NULL DEFAULT '',
`comment_type` varchar(20) NOT NULL DEFAULT 'comment',
`comment_parent` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`user_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `wp_comments`
ADD PRIMARY KEY (`comment_ID`),
ADD KEY `comment_post_ID` (`comment_post_ID`),
ADD KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
ADD KEY `comment_date_gmt` (`comment_date_gmt`),
ADD KEY `comment_parent` (`comment_parent`),
ADD KEY `comment_author_email` (`comment_author_email`(10));
A versão do MySQL é 5.7.33
[ATUALIZAR]
Não sei POR QUE, mas sei COMO resolvi esse problema:
ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFY `comment_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
Dessa forma, modificando os dois campos juntos , não recebo erros.
Funciona, mas ainda estou bastante curioso, então se tiver alguma ideia para compartilhar... :-)
Como diz o manual , para o
DATETIME
tipo de dadosPresumivelmente, sua tabela foi criada enquanto o
NO_ZERO_DATE
modo não estava em vigor, o que permitiu a0000-00-00
parte da data, mas parece estar em vigor agora, portanto, junto com o modo estrito, produzindo o erro que você vê. Ao modificarcomment_date
, outras definições de coluna também são revalidadas de acordo com o modo SQL atual e a revalidação dascomment_date_gmt
falhas.