连续调用时重复MySQL UNIX_TIMESTAMP()结果

为什么此代码为每次调用返回相同的UNIX_TIMESTAMP()值?

DECLARE myStamp1 FLOAT;

DECLARE myStamp2 FLOAT; 

DECLARE n INT;

SET myStamp1 = UNIX_TIMESTAMP();

SELECT SLEEP(1) INTO n;

SET myStamp2 = UNIX_TIMESTAMP();

SELECT myStamp1, myStamp2;

最佳答案 FLOAT数据类型只有23位的尾数,基本上相当于精度的七位小数. (是的,从技术上讲,限制更精确地指定为六位数.)但重点是FLOAT表示精度不超过七位小数.

现在,UNIX_TIMESTAMP()函数返回十位十进制数的整数值.因此,一秒钟的更改只会改变第10个(最低阶)十进制数字(或将9翻转为0).但这并不足以产生不同的FLOAT值. (最终,FLOAT的值会改变,但任何一秒的差异都不太可能导致不同的FLOAT值.)

我建议您尝试使用BIGINT,DECIMAL(10,0)或TIMESTAMP数据类型,或者如果需要(?)浮点类型的可伸缩性,请使用DOUBLE.

摘自MySQL文档

<剪断>

返回当前日期或时间的函数在查询执行开始时每个查询仅评估一次.这意味着在单个查询中对诸如NOW()之类的函数的多次引用总是产生相同的结果. (对于我们的目的,单个查询还包括对存储程序的调用(存储的例程,触发器或事件)以及该程序调用的所有子程序.)此原则也适用于CURDATE(),CURTIME(),UTC_DATE() ,UTC_TIME(),UTC_TIMESTAMP(),以及他们的任何同义词.

< /剪断>

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

(您显示的代码必须位于存储的程序中,因为DECLARE语句仅在存储的程序中有效.)

点赞