2011-10-23 19 views
2

小さな小数点以下の数値を大量に格納する必要があります(小数点の前に3桁、小数点以下6桁)。小さな小数の格納MySQL

私の仕様を理解するには、これには8バイトが必要です。私は整数を4バイトしか必要とせず、固定スケールファクタを使って検索した後に変換することができます。

intを使用する代わりに、より良い代替方法がありますか。数値に対して簡単に算術演算を行うことはできません。

ありがとうございました。

+0

何らかの理由でDECIMAL(3,6)が請求書に適合していませんか? – Jon

+0

また、9桁の有効数字は0〜10^10-1の範囲ですが、4バイトの符号なし整数は0〜2^32-1 <10^10-1です。これらの数字を格納するには少なくとも34ビット必要です。 – Jon

+3

@Jon: 'DECIMAL(9,6)'と書かれています。 – zerkms

答えて

-1

int」というデータ型のMySQLを使用している場合は機能しません。これは、整数が小数精度を処理できないためです。

ご質問によれば、 "固定小数点データタイプ"を使用する必要があります。これは、大量の計算&通貨データに役立ちます。 MySQLでは、必要なデータ型は「DECIMAL」で、詳細はhereで読むことができます。

適切な構文は "DECIMAL (9, 6)"です。ここで9は、合計9桁の値を格納できることを意味します。そのうち6桁は小数点以下で、3桁は小数点より前です。

希望します。

+3

プレーンなintで固定小数点演算を行うこともできます。 intを使って浮動小数点数をシミュレートする代わりに、範囲を失うだけでなく、さまざまな変換やレンジチェックを行う必要があります。これは好ましく、ちょうどそれが可能であることを言っているわけではありません。 –

+0

@Marc - ありがとう、私にこれを知らせるため。 +1 :) –

+0

私の全体的なポイントは、8バイトを使用するので、10進数を使用したくないということです。私がMarc Bが提案するように変換すると、データはintに簡単に収まります。私はある種の賢い選択肢があると思っていましたが、それに似ていません。私は小数点を使うことができ、記憶容量を2倍にする必要があるか、intを使うことができますが、すべての変換を行う必要があります。 –

2

これは正しいとは思わない。 DECIMAL(9,6)は仕事をする必要があります。 mysql 5.1のマニュアルに従って、3桁の2バイトと6桁の3バイトが必要になります。 IMHOは合計で8バイトではない5バイトです。 したがって、あなたが提案した整数の「ハッキング」より多くのメモリを必要としません。あなたの場合、私は間違いなく10進数で行くでしょう。

関連する問題