mysql的一个日常用法的BUG

一直以来,使用mysql,在统计时间差时,都是使用TIME_TO_SEC(timediff(d2,d1))的方式来处理。

今天偶然发现,该用法,存在BUG,例如:

select 
TIME_TO_SEC(timediff('2014-02-28 10:13:35', '2013-12-28 14:03:37')) as times0, 
timestampdiff(second, '2014-02-08 14:03:37', '2014-02-28 10:13:35') as times1,
TIME_TO_SEC(timediff('2014-02-28 10:13:35', '2014-02-08 14:03:37')) as times2, 
timestampdiff(second, '2013-12-28 14:03:37', '2014-02-28 10:13:35') as times3

执行结果:


很明显,times0应该等于times3,times1应该等于times2,但是,实际上,times0不等于times3。


进行更多实验,你会发现,TIME_TO_SEC(timediff(d2,d1))的用法,在时间跨度达到一定的情况下,其结果都是3020399。

具体这个跨度最大值是多少,以及为什么会出现这样的结果,有待去考究,暂记备忘。


最后建议大家使用timestampdiff来进行时间差的计算。

你可能感兴趣的:(数据库,工具相关)