【发布时间】:2012-02-29 17:17:42
【问题描述】:
我正在使用 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 $
有什么想法吗?
提前致谢!
【问题讨论】:
-
你不能用
decimal(14,4)吗? -
如果将其转换为字符串,然后比较字符串,它应该可以工作。问题是 14,4 是显示大小,但值和比较超出了这个范围。另一种方法是使用小数。
-
感谢您的帮助,确实有效;我仍然不明白为什么会发生这种情况,如果我存储了 14,4 个双精度值并且我正在与相同的数字进行比较,那么为什么要超出比较范围?
标签: mysql