我有一个 PHP 脚本在 MySQL 数据库中插入行。每行都有一个字段“created_at”,其中填充了 PHP 函数 microtime(true) 的值,并作为 double 值插入。 (微秒,因为我需要比秒更精确的东西)
我有另一个 PHP 脚本,它根据 created_at 字段选择行。
当我继续并像这样选择时:
SELECT * FROM `ms_voltage` WHERE created_at > 1302775523.51878
我收到一个结果集,第一行是 created_at 的 exactly that value 的行。
这是在我的 PHP 脚本中以及在手动执行查询时从 PhpMyAdmin 中发生的。但并非总是如此,并非针对每个值。真的只是偶尔一次。
这怎么可能?我没有要求大于/等于,我想要严格大于。 我是否忽略了一些与类型相关的东西?
最佳答案
是的,浮点运算有时可以做到这一点。要理解其中的原因,认识到正如并非所有数字都可以以 10 为基数准确表示一样,也不是所有数字都可以以 2 为基数准确表示。
例如,“1/3”可以以 10 为基数写为 0.33333 或 0.33334。两者都不是真正的“正确”;他们只是我们能做的最好的。以 10 为基数的“DOUBLE”可能是 0.3333333333 或 0.3333333334,这是数字的两倍,但仍然不“正确”。
最好的选择是使用 DECIMAL 值,或使用 INT 值(然后将您的实际值乘以 10000 或 100000 以获得将您关心的十进制数字转换为该 int)。
关于php - MySQL 大于 microtime 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663504/