MySQL中的数据,大家是用数据库时间戳还是PHP时间戳? [ 求助交流 ]
这样一个问题:
在应用开发过程中经常会对数据库中的某些表添加created_at或updated_at字段来记录某条记录被创建和最后更新的时间戳。大家在开发时一般是用数据库内建的时间戳类型来存储呢(TIMESTAMP
,DATETIME
之类),还是字段使用int型然后存入一个php时间戳(形如1432874587
的整形)?
我先来说一下个人看法:我比较倾向于使用数据库内建的时间戳。理由:
- 这个是体验上比较直观的。对于线上项目,在程序出现问题的时候往往要进入数据库直接查历史数据,这时如果我们存储的是PHP时间戳的话就很不方便,你会看到一列形如乱码的字段(pia)在那儿。当你想筛选数据时,就不得不使用相关SQL函数进行时间转换。而且由于时间戳是时区无关的,有时还要手动处理时差,才能的到准确的范围,不然你直接在数据库修正数据的时候很容易有那么几个小时的用户数据躺枪,同时还有那么几小时的数据漏掉,对于用户来自于多个时区的项目这影响可能是灾难性的。
- 在页面上获取用户输入的时候,我相信没有哪个程序会让用户直接输入时间戳吧?绝大部分情况下程序收到的一手用户输入本质上还是一个字符串。我们在后端需要转换成时间戳再写入数据库,而且转换前的格式验证还是不能省的。
但有一次公司一个持相反观点的工程师在讨论时是这样说的:
- 有这样一条原则,不依赖数据库处理主要数据逻辑。由于数据库时间戳取出的时候在PHP变量内表示为字符串,会在需要计算时带来不便。在对这些字段筛选时,PHP不得不依赖于数据库查询函数来进行数据转换。
- 还是时区的问题,如果数据库时区配置和PHP配置不同,或者用户来自多时区,还需要根据客户端时区来处理时差。使用时间戳可以避免这些麻烦,直接对秒数进行数学计算。
想问问,大家是怎么看的?你们现在的项目中都是怎么实现的?
共 5 条回复
-
http://stackoverflow.com/questions/409286/datetime-vs-timestamp
我是存php time(),主要是看别人都这么存的,我就这么存了。。没思考太多啊。
-
KillMeAgain 回复于 2015-06-09 17:55 举报
支持后者
有这样一条原则,不依赖数据库处理主要数据逻辑。由于数据库时间戳取出的时候在PHP变量内表示为字符串,会在需要计算时带来不便。在对这些字段筛选时,PHP不得不依赖于数据库查询函数来进行数据转换。 还是时区的问题,如果数据库时区配置和PHP配置不同,或者用户来自多时区,还需要根据客户端时区来处理时差。使用时间戳可以避免这些麻烦,直接对秒数进行数学计算。
共 3 条回复@thinker_g 我个人也偏重后者,自己处理。原因:
这个情况不多见,不能只是为了方便自己而放弃程序的多时区及给程序增加额外的负担,而且很多时候,可能只是开发和软件出现问题的时候才会需要进行时间戳转换。这个时候就算非常复杂的 或者超低效率的sql,没关系,只是你一个用户而已。对整体性能的影响就是执行的时间。所以。。。当然可能没有大型项目经验,说法很片面。仅仅讨论学习。 -
如果换了数据库,你那些数据还能用吗?时间戳和时区无关,想要什么格式自己就可以转,也可以在SQL查询的时候让他把时间戳自动转换成时间输出,这个数据库本来就支持,是你不会用而已!
共 2 条回复@thinker_g 我公司多语言项目,确实出过时区问题,因为是多数据库主从。这个东西还是不要直接存数据库了,时间戳和时区无关比较靠谱
thinker_g
注册时间:2015-02-03
最后登录:2024-08-08
在线时长:12小时1分
最后登录:2024-08-08
在线时长:12小时1分
- 粉丝20
- 金钱835
- 威望25
- 积分1205