当前位置: 首页 > 知识库问答 >
问题:

mysql#1067-“created_at”的默认值无效

长孙玉泽
2023-03-14

我正在学习一个在线课程,包括创建一个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;";
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(意大利语)的本地设置可能会产生任何问题吗?MySQL版本为::5.7.21-0Ubuntu0.16.04.1-(Ubuntu)。PHP版本7.0.22。Wordpress版本:4.9.2。谢谢你。

共有1个答案

慕铭
2023-03-14

时间戳是自1970年1月1日以来的秒数。这意味着这实际上是一个整数,而不是字符串。如果您希望默认值在该点(1970-01-01 00:00),请将其指定为default0。不能将字符串传递到时间戳中。

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)
)
  • https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
 类似资料:
  • 主要内容:在创建表时设置默认值约束,在修改表时添加默认值约束,删除默认值约束默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。 例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。 默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。 在

  • 我的表中有“created_at”列,现在我想添加“updated_at”,默认值与“created_at”相同。我正在使用laravel迁移。

  • 问题内容: 我的数据库是MySql 5.6。 我想使用CURRENT_TIMESTAMP作为类型为TIMESTAMP(3)的属性的默认值。 但是我得到了错误: 错误1067(42000):“更新”的默认值无效 我认为是因为仅以秒为单位。 如何将小数部分的当前时间设置为默认值? 问题答案: 根据文档并输入列: 如果或列定义在任何地方都包含显式的小数秒精度值,则在整个列定义中必须使用相同的值。 这是允

  • 问题内容: 我遇到了一个无法解决的SQL愚蠢问题。 错误: 有人可以帮我吗? 问题答案: 仅在字段上可接受。字段必须保留为空的默认值,或者根本不保留任何默认值- 默认值必须为常量值,而不是表达式的结果。 相关文档:http : //dev.mysql.com/doc/refman/5.0/en/data-type- defaults.html 您可以通过在表上设置插入后触发器以在任何新记录上填充“

  • 错误1067(42000):“updated”的默认值无效 我想这是因为的精度只有秒。 如何将当前时间设置为具有小数部分的的默认值?

  • 问题内容: 我希望一列默认为GUID,因此,如果我正在执行插入操作且未明确设置该值,则希望将其默认为新的GUID值。 我怎样才能做到这一点? 问题答案: 由于UUID()不被接受为DEFAULT约束,因此您需要使用触发器。 这将设置列的值: