php - mysq日期用datetime好还是用int10好
PHP中文网
PHP中文网 2017-04-11 10:01:46
[PHP讨论组]

那种比较好

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
PHP中文网

在《高性能MYSQL》中,对于“日期和时间类型”是这样推荐的:

int(10)

int(10)并不是指int的取值范围,而是指定宽度。对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了mysql的一些交互工具(如mysql命令行客户端)用来显示字符的个数。对于存储和计算而言,int(1)和int(20)是相同的。

datetime

1001年~9999年,精度为秒,格式YYYYMMDDHHMMSS整数,与时区无关。

timestamp

timestamp保存了从1970年1月1日午夜(格林尼治)以来的秒数,最多只能到2038年

如果在多个时区存储或访问数据,timestamp和datetime的行为将很不一样。timestamp提供的值与时区有关系,datetime则保留文本表示的日期和时间。

注:MySQL对于timestamp的行为很复杂,经常在不同版本的mysql中会变动,需要亲自验证行为)
timestamp默认为NOT NULL

除了特殊行为,通常建议使用timestamp,他比datetime空间效率更高

用int存储timestamp

不推荐在int中存储timestamp,不方便处理

大部分时间类型都没有替代品,因此没有什么是最佳选择的问题。唯一的问题是保存日期和时间的时候需要做什么。

迷茫

看你项目需求以及运营需求
1.如果运营团队经常需要分析查阅数据,分析导出报表,
那么datetime 是首选,其他情况应该首选int类型.

PHP中文网

我建议用unsigned bigint(20).
因为unsigned int(10)最大值为4294967295.
64位PHP执行echo date('Y-m-d H:i:s', 4294967295);可见:
2106-02-07 14:28:15
这个时间是我们可以预见的.

为什么要用时间戳(整数)呢?因为时间戳方便运算后对比.

比如:以当前时间为基础,查询过去8小时内,1天内,1周内
符合特定条件(比如浏览数/获赞数)的数据.

8小时内: where time > (time()-3600*8) order by 浏览数 desc limit 20;
1天内: where time > (time()-3600*24) order by 浏览数 desc limit 20;
1周内: where time > (time()-3600*24*7) order by 浏览数 desc limit 20;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号