MySQL 的时间戳自动更新问题

Q & A

最近在使用 laravel 的时候发现,更新某个指定 model 的信息时(不包括时间戳),其所连带的 timestamp 也会被更新。这使我一度陷入了苦恼。

此处所指 timestamp 并非 Laravel 原生 created_atupdated_at 字段。

有问题,Google 之。可是一开始搜错了方向,一直以为是 Laravel Eloquent 模型更新的问题,死活找不到满意的答案。

之后向 Laracasts 里面的 dalao 们求助,才知道原来是 MySQL 的问题。

Timestamps in MySQL generally used to track changes to records, and are often updated every time the record is changed.

后来去看了一下我的 MySQL,发现:

Field Type Null Key Default Extra
check_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

那这不是正好满足上文的条件么……我是不是煞笔

于是将 migration 中的 check_time 字段改成 NULLABLE ,运行测试,成功通过!

One more thing…

Laracastedoc 网友给出了另一种解决方案。由于 MySQLtimestamp 自动更新的特性,建议使用 DateTime 类型来表示时间 表示的时间也可以更久

    分享到:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

验证码 *