微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL大于带有microtime时间戳的

如何解决MySQL大于带有microtime时间戳的

| 我有一个PHP脚本在MysqL数据库中插入行。每行都有一个字段'created_at \',其中填充了PHP函数microtime(true)的值,并作为双精度插入。 (微时间,因为我需要比秒精确的东西) 我还有另一个PHP脚本,用于根据created_at字段选择行。 当我继续选择以下内容时:
SELECT * FROM `ms_voltage` WHERE created_at > 1302775523.51878
我收到一个结果集,该结果集的第一行具有与created_at完全相同的值的行。 手动执行查询时,这是从我的PHP脚本内部以及PHPMyAdmin内部发生的。但并非总是如此,并非每一个价值。真的只是偶尔一次。 这怎么可能?我没有要求大于/等于,我要严格大于。 我是否正在忽略与类型相关的内容?     

解决方法

是的,浮点运算有时可以做到。为了理解为什么,认识到并非所有数字都可以在底数10中准确表示,也不是所有数字都可以在底数2中准确表示,这很有帮助。 例如,\“ 1/3 \”可以以10为底的0.33333或0.33334。都不是真正的“正确”。他们只是我们能做的最好的事情。以10为底的\“ DOUBLE \”可能是0.3333333333或0.3333333334,是数字的两倍,但仍然不是“正确\”。 最好的选择是使用DECIMAL值,或使用INT值(并将实际值乘以10000或100000,以便将您关心的小数位数放入该int中)。     ,DOUBLE类型仅表示近似数字数据值。尝试使用DECIMAL类型。     ,您的列是浮点数吗?用true调用microtime会给您一个浮点数,它看起来像一个浮点数,它将在您看不到的.51878之后有一个数字,因此这些数字使存储的值大于查询中的值。 除非您真的需要浮点数,否则我会将字符串结果转换为int,甚至将两列转换为秒和秒。然后,您可以对已知值使用>或<,而不必担心浮点值的不精确性。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。