![]() | 1 RE 2017-01-03 20:17:57 +08:00 via iPhone ![]() 你说的是 timestamp ? |
![]() | 2 rainex 2017-01-03 20:19:59 +08:00 ![]() 没看懂你到底问的是什么,只能说 1 部分数据库,用数字类型的字段存储时间戳,比用日期型的字段, sql 性能好一些 2 多年没看过 php 了,记得好像是没 long 类型,只有 float 类型? 32 位 php 的 int 存储当前时间的毫秒位数不够,有诸如此类的问题。 3 也有可能是部分码神瞎胡写 |
3 weyou 2017-01-03 20:31:01 +08:00 via Android ![]() 是说用 int64 来表示时间么? |
![]() | 4 smilezino 2017-01-03 20:37:46 +08:00 ![]() 时间戳无关于时区 |
![]() | 5 loggerhead 2017-01-03 20:43:28 +08:00 ![]() 1. 没有歧义 2. 省空间 3. 某些情况下进行运算的时候省时间 |
![]() | 6 murmur 2017-01-03 20:43:47 +08:00 ![]() 因为有的时候你的却搞不懂每个数据库的 datetime 倒是是个什么玩意儿 有的是 date 有的是 string long 的话你能搞清楚 而且比较大小、做差的时候 long 更简单一点点 |
![]() | 7 jarlyyn 2017-01-03 20:51:03 +08:00 ![]() 问题是用数字还是长整? |
![]() | 8 kimwang OP 不好意思,我在自学 PHP ,概念说得不准确,已在物色合适的图书购买。 说回问题,其实 ip2long 和这种将时间转化为 INT(11)的格式存入数据库,它的作用是什么?如果要进行输出或者对比不是更麻烦? MYSQL 本身就有时间型,为什么他们不用呢? 为了描述问题,我放了两张图片,谢谢。 数据类型设置情况: http://i1.piimg.com/4851/47e0d51ff5a1d1d5.png 转化后保存到数据库的情况: http://i1.piimg.com/4851/04518dff3e52fa6d.png |
![]() | 9 kimwang OP @jarlyyn 你好 用的: INT 或 INTEGER 4 字节 (-2 147 483 648 , 2 147 483 647) (0 , 4 294 967 295) 大整数值 保存后的情况请看 8 楼的第二张图片。 |
![]() | 10 Troevil 2017-01-03 20:55:50 +08:00 ![]() @kimwang 抛开需求看问题通常都是没有结论的, 这个设计直接问这个项目的设计者不就好了, 无论是 时间戳 还是 datetime 都是各有利弊的, 三个字 `看需求` |
![]() | 13 RE 2017-01-03 21:10:05 +08:00 ![]() @kimwang 你这截图就是时间戳啊,估计你看的教程也不准确, 1. 存储时间戳只需要 10 位不需要 11 位, 2. 因为时间没有负数形式(准确的说是 1970 年 1 月 1 日到现在不存在负数)所以勾选 unsigned 这样可以得到更大的最大值。 时间戳( timestamp )指的是 1970 年 1 月 1 日开始到某个时间点的秒数,不记录时区等信息。数据量庞大的情况下,如果需要计算一些时间差、时间范围等,数字形式比日期形式更好直接计算。 估计是你用的 mysql 编辑器自动把 nt 加上了逗号分隔,让你有了疑惑(这点是结合你之前的帖子猜测的)。 |
![]() | 14 zhidian 2017-01-03 21:12:04 +08:00 因为从一开始,时间就是整形,那叫 Unix Time 或者说 Epoch Time (创世纪?)。但是 unix time 用的 int32 ,精度不够(精确到 s ),后来大家都觉得应该用毫秒啊!于是换了 int_64 来存,记得以前自己算过,按照毫秒够用几百万世纪。(当时我的疑问是“为什么要用 signed ,少了一半的可用区间啊?!”) |
![]() | 15 zhidian 2017-01-03 21:15:27 +08:00 ![]() 外,转化为整形对比更简单啊。直接做差,然后用 / 和 % 就可以算出每个时间精度的量。 |
![]() | 17 x8 2017-01-03 21:19:57 +08:00 你精度只到秒,目前来看 int32 是够的,到毫秒不够 |
![]() | 18 qiayue PRO ![]() 不同的需求,用不同的存储格式,比如我要找出距今 2 小时内的所有记录,是不是用整形记录的时间(时间戳)更方便 |
![]() | 19 kimwang OP @RE 估计是你用的 mysql 编辑器自动把 int 加上了逗号分隔,让你有了疑惑(这点是结合你之前的帖子猜测的)。 RE:对,可能有这个情况,因为数据库内逢千位打逗号我一时间没缓过来,以为搞财务呢。 我查到了 http://www.cnblogs.com/thingk/p/3826751.html 是时间戳的问题,谢谢。 |
![]() | 20 woshifyz 2017-01-03 21:24:32 +08:00 ![]() 1. code 方便 2. 规避可能出现的时区问题,用 datetime 的话,到时候碰到时区问题就麻烦了 |
22 thekll 2017-01-04 02:10:37 +08:00 |
![]() | 23 tigerstudent 2017-01-04 08:04:22 +08:00 1 、楼主说的长整型应该是指 32 位的 long 吧。 2 、对 c 语言来说,在不同的编译器或平台, int 可能是 16 位或 32 位的;从这个角度来说,统一使用 long 可以保持统一。 |
![]() | 25 skydiver 2017-01-04 10:23:04 +08:00 via Android @tigerstudent 一般的平台上 long 是 64bit int 才是 32bit |
![]() | 26 tigerstudent 2017-01-04 17:12:30 +08:00 via Android @skydiver 非也。 long long 才是 64 位的。 |
![]() | 27 skydiver 2017-01-04 17:17:04 +08:00 @tigerstudent 在 64bit Linux 环境下, int 是 32 位, long 和 long long 都是 64 位 |