MySQL双重类型比较失败

时间:2012-02-29 17:17:43

标签: mysql

我正在使用JavaScript和php + mysql开发一个聊天模块,我将聊天数据存储到一个简单的表格中:id, member1, member2, message, timestamptimestamp列为 double(14,4),其中我将时间戳存储在微秒级别,例如: 1330522898.3137;

我的问题是: 当我将此时间戳与另一个时间戳进行比较时,例如

   SELECT * FROM chat_rows WHERE timestamp >= 1330535168.9548

仅在特定数字上,如上所述,我使用运算符>=得到0行,尽管我有一行具有完全相同的值;这由运算符=区分的几乎相同的查询证明:

   SELECT * FROM chat_rows WHERE timestamp = 1330535168.9548

返回一行;

解决方法是用varchar替换double(14,4)类型,但是比double慢;

也只在此服务器上失败(我的开发者): Apache / 2.2.20(Ubuntu) MySQL客户端版本:5.1.58

在我当地看起来很有效; - 这是窗户 Apache / 2.2.21(Win32)mod_ssl / 2.2.21 OpenSSL / 0.9.8o Versiunea clientului MySQL:mysqlnd 5.0.8-dev - 20102224 - $ Revision:318113 $

有什么想法?

提前致谢!

1 个答案:

答案 0 :(得分:2)

进行浮点数比较的正确方法是首先确定数字之间差异的可接受容差,然后与容差值进行比较。

MySQL floating point comparison issues