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 $
任意の考え?
ありがとうございます!
'decimal(14,4)'を使用できませんか? – a1ex07
それを文字列にキャストし、文字列を比較するとうまくいくはずです。問題は、14,4が表示サイズですが、値と比較がそれを超えていることです。代わりに小数点を使用することです。 –
本当にうまくいってくれてありがとうございました。私はまだ14,4倍の値が格納されていて、同じ数と比較しているのですが、どうしてこの比較が行われるべきなのか、なぜこれが起こっているのか理解できませんでしたか? –