通貨の値に最適なSQLデータ型は何ですか?私はMySQLを使用していますが、データベースに依存しないタイプを好みます。
通貨の値に最適なSQLデータ型は何ですか?私はMySQLを使用していますが、データベースに依存しないタイプを好みます。
回答:
Decimal(19,4)
ほとんどの場合、通常のようなものはかなりうまく機能します。格納する必要のある数値のニーズに合わせて、スケールと精度を調整できます。SQL Serverでも、「money
」は非標準であるため使用しない傾向があります。
(19,4)
代わりに使用する利点は何(19,2)
ですか?
注意しなければならない唯一のことは、あるデータベースから別のデータベースに移行する場合、DECIMAL(19,4)とDECIMAL(19,4)が異なることを意味する場合があります。
(http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html)
DBASE:10,5(10整数、10進数5) MYSQL:15,5(15桁、10整数(15-5)、5桁の10進数)
計算に必要な小数点以下の桁数を計算することも重要です。
100万株の価格の計算を必要とする株価アプリケーションに取り組みました。引用された株価は7桁の精度で保存されなければなりませんでした。
アサフの反応
あなたがどれだけのお金を得たかによります...
軽快に聞こえますが、実際には適切です。
今日のみ、列の1つ(GrossRate)がDecimal(11,4)に設定されており、製品部門がいくつかの素晴らしいリゾートの部屋の契約を結んだため、Rateテーブルにレコードを挿入できないという問題がありましたボラボラ島では、1泊あたり数百万パシフィックフランで販売されています。データベーススキーマが10年前に設計されたときには、決して時代遅れになることはありませんでした。
会計アプリケーションの場合、値を整数として格納することは非常に一般的です(それが唯一の方法であるとさえ言う人もいます)。アイデアを得るには、トランザクションの量(100.23ドルと仮定しましょう)を100、1000、10000などで乗算して、必要な精度を取得します。したがって、セントのみを格納する必要があり、安全に切り上げまたは切り捨てできる場合は、100を掛けるだけです。私の例では、格納する整数は10023になります。データベースのスペースを節約し、2つの整数を比較する方が2つの浮動小数点数を比較するよりもはるかに簡単です。私の0.02ドル。
非常に遅いエントリーですが、GAAPは大体の目安です。
アプリケーションが1兆までの金額の値を処理する必要がある場合、これは機能します。13、2 GAAP(一般に認められた会計原則)に準拠する必要がある場合は、次を使用します:13,4
通常、出力を13,2に丸める前に、金額を13,4で合計する必要があります。
DECIMAL(19,2)
すべての金額の値にデフォルトのようなものを使用することができますが、1,000ドル未満の値のみを保存する場合は、貴重なデータベース領域の無駄になります。
ほとんどの実装でDECIMAL(N,2)
は十分です。ここで、の値N
は、少なくとも、.
そのフィールドに格納されることが予想される最大の合計の前の桁数です+ 5
。したがって、999999.99より大きい値を格納することを予期していない場合は、DECIMAL(11,2)
(期待値が変わるまで)十分すぎるはずです。
GAAP準拠にしたい場合は、を使用できますDECIMAL(N,4)
。ここで、の値N
は、少なくとも、.
そのフィールドに格納されると予想される最大の合計の前の桁数です+ 7
。
データの性質によって異なります。事前に熟考する必要があります。
MySQLではdecimal(65,30)を使用できますが、転送オプションを開いたままにしたい場合は、スケールに31、精度に30を使用するのが制限のようです。
最も一般的なRDBMSの最大スケールと精度:
精密スケール オラクル31 31 T-SQL 38 38 MySQL 65 30 PostgreSQL 131072 16383
2015年9月ジンバブエ政府は、ジンバブエドルを1米ドルから35兆5,000億ドルのレートで米ドルに交換すると発表した5
私たちは「うん、確かに……あの狂った数字は必要ない」と言う傾向がある。まあ、ジンバブエ人もそう言っていた。それほど昔ではない。
ジンバブエドルで1百万USDのトランザクションを記録する必要があると想像してみてください(今日ではありそうにないかもしれませんが、これが10年後にどのようになるか知っていますか?)。
- (1百万米ドル)*(35 Quadrylion ZWL)=(10 ^ 6)*(35 * 10 ^ 15)= 35 * 10 ^ 21
- 必要です:
- 「35」を格納する2桁
- ゼロを格納するための21桁
- 小数点以下4桁
- これにより、decimal(27,4)になり、エントリごとに15バイトのコストがかかります
- 無料で左側にもう1桁追加できます-15バイトにdecimal(28,4)があります
- これで、ジンバブエドルで表された10百万米ドルのトランザクションを保存できるようになりました。