飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Laravel时间字段created_at和updated_at为什么默认采用timestamp类型?

Author:飘易 Source:飘易
Categories:PHP编程 PostTime:2016-11-24 14:14:44
正 文:

接触php流行框架Laravel的时候,对这个框架的ORM能自动维护时间字段created_at和updated_at印象深刻,查看laravel 5.1源码,我们发现laravel采用了默认timestamp类型Illuminate/Database 源码中 MYSQL 创建 Timestamp 类型字段代码


那Laravel为什么不采用国内开发者比较喜欢的int类型或者时间范围更广的datetime类型呢?


引用zhuzhichao的说法:


比较了一下 datetime 和 timestamp:


datetime 更像日历上面的时间和你手表的时间的结合,就是指具体某个时间。

timestamp 更适合来记录时间,比如我在东八区时间现在是 2016-08-02 10:35:52, 你在岛国(此时时间为 2016-08-02 11:35:52),我和你在聊天,数据库记录了时间,发过去的信息带上的时间是你在1小时前的? 好迷啊。当然有办法,自己计算时区。

时间范围是 timestamp 硬伤,当然 datetime 也记录不了刘备什么时候出生。


timestamp 和 UNIX timestamps


显示直观,出问题了便于排错,比好多很长的 int 数字好看多了。

int 是从1970年开始累加的,如果之前的时间需要用负数支持,数据库可能会有些问题,不过现在没什么问题了,timestamp 是自带时区转换的,同上面的第2项。

用户前端输入的时间一般都是日期类型,如果存储 int 还需要存前取后处理,UNIX timestamps 更快。


个人总结(仅供参考):


timestamp 记录经常变化的更新/创建/发布/日志时间等,并且是近来的时间,够用,免时区处理,给你我便利;

datetime 记录生日、纪念事件、超出 timestamp 的时间,记得时区处理;

UNIX timestamps 是自己的喜好;

如果你不考虑时区,或者有自己一套的时区方案,随意了,喜欢哪个上哪个了;

laravel 是设计比较国际化的框架,为了程序员方便、符合数据库设计标准,所以 created_at updated_at 使用了 timestamp 是无可厚非的。

那么有没有一个时间类型同时解决了范围、时区的问题,这是不可能的!不是还有 tinyInt BigInt 吗?取自己所需,并且 MySQL 是允许数据库字段变更的。


关于 timestamp 的2038年问题:

如果到了2038年,MySQL官方还不解决这个问题的话,Laravel可以简单升级下,在model层就可以解决掉这个问题;当然,我相信MySQL会到时解决掉这个2038的问题,所以我们正常使用是没有问题的。


关于MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较http://www.piaoyi.org/database/MYSQL-INT-TIMESTAMP-DATETIME.html



【参考】:

为什么 Laravel 默认使用timestamp字段作为新建时间,更新时间呢?

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:PHP通过php-java-bridge调用JAVA的jar包里class类
0条评论 “Laravel时间字段created_at和updated_at为什么默认采用timestamp类型?”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有