2012-02-29 9 views
1

JavaScriptとphp + mysqlを使用してチャットモジュールを開発しており、チャットデータをid, member1, member2, message, timestampという単純なテーブルに格納しています。 timestampの列は倍(14,4)です。タイムスタンプはマイクロ秒レベルで保存されています(例: 1330522898.3137)。MySQLのダブルタイプの比較が失敗します

私の問題がある: 私は唯一の特定の番号に

SELECT * FROM chat_rows WHERE timestamp >= 1330535168.9548 

のように、別のもので、このタイムスタンプを比較していたとき、私は持つ行を持っているが、上記このように、私は演算子>=を使用して0行を取得まったく同じ値。これは、オペレータ=によって区別ほぼ同じクエリによって証明される:

一つの行を返す
SELECT * FROM chat_rows WHERE timestamp = 1330535168.9548 

この問題を回避するには、double(14,4)タイプをvarcharに置き換えますが、doubleよりも遅くしてください。 のApache/2.2.20(Ubuntuの) MySQLクライアントのバージョン:

はまた、このサーバーのみ(私の開発1)に障害が発生し、動作するようだ私の地元では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 - $リビジョン:318113 $

任意の考え?

ありがとうございます!

+2

'decimal(14,4)'を使用できませんか? – a1ex07

+0

それを文字列にキャストし、文字列を比較するとうまくいくはずです。問題は、14,4が表示サイズですが、値と比較がそれを超えていることです。代わりに小数点を使用することです。 –

+0

本当にうまくいってくれてありがとうございました。私はまだ14,4倍の値が格納されていて、同じ数と比較しているのですが、どうしてこの比較が行われるべきなのか、なぜこれが起こっているのか理解できませんでしたか? –

答えて

1

浮動小数点数の比較を行う正しい方法は、まず数値間の許容差を決定し、次に許容値との比較を行います。

MySQL floating point comparison issues

+0

ありがとう、私は今それを持っている。 –

関連する問題