我正在使用JavaScript和php + mysql开发一个聊天模块,我将聊天数据存储到一个简单的表格中:id, member1, member2, message, timestamp
。
timestamp
列为 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 $
有什么想法?
提前致谢!
答案 0 :(得分:2)
进行浮点数比较的正确方法是首先确定数字之间差异的可接受容差,然后与容差值进行比较。