【问题标题】:live MySQL db accepts 'CURRENT_TIMESTAMP" as datetime value - local does not实时 MySQL db 接受“CURRENT_TIMESTAMP”作为日期时间值 - 本地不接受
【发布时间】:2018-08-25 21:58:36
【问题描述】:

我选择了一个已有几年历史的项目,并注意到 CURRENT_TIMESTAMP 与许多 php 调用一起发送,以更新许多行中的日期时间字段。这在现场环境中完美运行 - 但是,在我的本地设置中,它没有。

Live DB 和我从 WAMP64 下载的本地版本都在 MySQL5.7.19 上运行。

运行涉及插入 CURRENT_TIMESTAMP 的查询的 PHP 脚本将返回以下错误;

Invalid default value for 'last_update' timestamp

同样,在实时服务器上,这没有问题。两者都使用 MySQLi 来执行这些插入查询。

这里有什么我遗漏的吗?某种允许将 CURRENT_TIME 插入时间戳字段的服务器端配置设置?

【问题讨论】:

标签: php mysql


【解决方案1】:

CURRENT_TIMESTAMP 字段自动选择服务器的当前时间。或者只接受时间戳值。

因此,DATETIME 字段必须保留默认值 null 或根本没有默认值 - 默认值必须是常量值,而不是表达式的结果。

相关文档:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

您可以通过在表上设置插入后触发器以在任何新记录上填充“现在”值来解决此问题。

【讨论】:

    【解决方案2】:

    也许数据库丢失了日期的默认值。您可以尝试以下任一方法:

    ALTER TABLE mydb.mytable MODIFY myfield datetime DEFAULT CURRENT_TIMESTAMP;
    

    或者

    ALTER TABLE mydb.mytable MODIFY myfield datetime DEFAULT NOW();
    

    【讨论】:

      【解决方案3】:

      插入语句中必须缺少特定列,因为错误消息指出Invalid default value。 请查看:Invalid default value for 'create_date' timestamp field(并在此处阅读有用的 cmets)。 ;-)

      【讨论】:

        【解决方案4】:
        1. 如果您从 php 代码中手动插入 last_update 值,则将 mysql 归档为 var-char,因为您传递的日期不会被数据库识别为日期,并且正在发生此错误。

        2. 或者您可以将默认值设置为 CURRENT_TIMESTAMP,并将属性设置为更新插入 CURRENT_TIMESTAMP。

        因此,每当提交任何更新时,它都会自动更新 CURRENT_TIMESTAMP。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-05
          • 2017-05-17
          • 2019-04-08
          • 1970-01-01
          • 2011-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多