我正在进行在线课程,其中包括创建Wordpress插件。 我尝试按照说明(并使用提供的代码排除我身边的任何错误)来创建自定义表时出现问题。 这是原始代码的一部分:
$sql = "CREATE TABLE {$wpdb->prefix}ssp_survey_responses (
id mediumint(11) UNSIGNED NOT NULL AUTO_INCREMENT,
ip_address varchar(32) NOT NULL,
survey_id mediumint(11) UNSIGNED NOT NULL,
response_id mediumint(11) UNSIGNED NOT NULL,
created_at TIMESTAMP DEFAULT '1970-01-01 00:00:00',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE INDEX ix (ip_address,survey_id)
) $charset_collate;";
我试图直接在MySQL数据库中插入SQL,清理代码:
CREATE TABLE ssp_survey_responses (
id mediumint(11) UNSIGNED NOT NULL AUTO_INCREMENT,
ip_address varchar(32) NOT NULL,
survey_id mediumint(11) UNSIGNED NOT NULL,
response_id mediumint(11) UNSIGNED NOT NULL,
created_at TIMESTAMP DEFAULT '1970-01-01 00:00:01',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE INDEX ix (ip_address,survey_id)
)
和MySQL给出了这个错误
#1067 - ' created_at'
的默认值无效
MySQL(意大利语)的本地设置可能会造成任何问题吗? MySQL版本是:: 5.7.21-0ubuntu0.16.04.1 - (Ubuntu)。 PHP版本7.0.22。 Wordpress版本:4.9.2。 谢谢。
答案 0 :(得分:3)
时间戳是自1970年1月1日以来的秒数。这意味着这实际上是一个整数,而不是字符串。如果您希望默认值位于该点(1970-01-01 00:00),请将其指定为DEFAULT 0
。字符串无法传递到时间戳。
CREATE TABLE ssp_survey_responses (
id mediumint(11) UNSIGNED NOT NULL AUTO_INCREMENT,
ip_address varchar(32) NOT NULL,
survey_id mediumint(11) UNSIGNED NOT NULL,
response_id mediumint(11) UNSIGNED NOT NULL,
created_at TIMESTAMP DEFAULT 0,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE INDEX ix (ip_address,survey_id)
)
答案 1 :(得分:0)
您需要根据您的时区编辑默认时间戳(假设GMT + 1):
CREATE TABLE ssp_survey_responses (
id mediumint(11) UNSIGNED NOT NULL AUTO_INCREMENT,
ip_address varchar(32) NOT NULL,
survey_id mediumint(11) UNSIGNED NOT NULL,
response_id mediumint(11) UNSIGNED NOT NULL,
created_at TIMESTAMP DEFAULT '1970-01-01 01:00:01',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE INDEX ix (ip_address,survey_id)
)
如果您的时区是GMT + X(其中X是正数),那么转换回GMT的时间戳将是负数,这实际上是无效的。 这里,这个时间戳被转换回格林尼治标准时间00:00:01,存储为0。