如果这个问题听起来太基本,首先对不起大家。
我有一个 Wordpress 数据库和一个表wp_comments
。
在此表中,我有两个DATETIME
字段,其默认值为0000-00-00 00:00:00
.
我需要将此值更改为CURRENT_TIMESTAMP
,因此例如我运行以下查询:
ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
因此,comment_date
(NOT comment_date_gmt
) 是要修改的列。
现在,当我运行此查询时,我收到以下错误:
Error 1067: Invalid default value for comment_date_gmt
为什么会这样?我能做什么?
[更新]
这是表格:
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));
MySQL 版本是 5.7.33
[更新]
我不知道为什么,但我知道我是如何解决这个问题的:
ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFY `comment_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
这样,通过同时修改两个字段,我不会出错。
它有效,但我仍然很好奇,所以如果有任何想法分享...... :-)
正如手册所说,对于
DATETIME
数据类型大概您的表是在
NO_ZERO_DATE
模式无效时创建的,这允许0000-00-00
日期部分,但它现在似乎有效,因此,与严格模式一起,产生您看到的错误。修改时comment_date
,其他列定义也会按照当前的SQL模式重新验证,重新验证comment_date_gmt
失败。