mysql#1067 - ' created_at'

时间:2018-01-27 17:59:59

标签: php mysql wordpress timestamp

我正在进行在线课程,其中包括创建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。 谢谢。

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。