NUMERIC
SQL データ型との違いは何DECIMAL
ですか? データベースがこれらを異なる方法で扱う場合、少なくとも次の方法を知りたいです。
- SQLサーバー
- オラクル
- Db/2
- MySQL
- PostgreSQL
さらに、データベース ドライバーがこれらの型を解釈する方法に違いはありますか?
それらはほとんどすべての目的で同じです。
かつては、ほぼ同じものに対して異なるベンダーが異なる名前 ( NUMERIC
/ ) を使用していました。DECIMAL
SQL-92 はそれらを同じにしましたが、ベンダー固有の可能性がある小さな違いが 1 つあります。
NUMERIC
定義されているとおり正確でなければなりません — したがって、小数点の左側に小数点以下 4 桁、小数点の右側に小数点以下 4 桁を定義する場合、DB は常に小数点以下 4 + 4 桁を格納する必要があります。 .
DECIMAL
より簡単に実装できる場合は、より大きな数を自由に許可できます。これは、データベースが実際に指定されたよりも多くの数字を格納できることを意味します (バックグラウンド ストレージに余分な数字用のスペースがあるため)。これは、データベースが12345.0000
上記の例で小数点以下 4 + 4 桁の格納を許可する可能性があることを意味しますが1.00005
、将来の計算に影響を与える可能性がある場合、格納は許可されません。
現在のほとんどのデータベース システムは、 and を完全な同義語として扱うDECIMAL
かNUMERIC
、まったく同じ動作をする 2 つの異なる型として扱います。DECIMAL
型がまったく異なると見なされる場合、列を参照する列に外部キー制約を定義できない場合NUMERIC
や、その逆の場合があります。
それらは同義語であり、まったく違いはありません。
少なくともANSI SQL 標準のSQL Serverでは。This SO answerはANSIの違いを示していますが、実装では同じであると思われます
Postgres: 違いなし
表8.1のドキュメントの説明は同じように見えますが、なぜそれが個別に言及されているのか説明されていないため、Tom Laneの投稿によると
Postgres では違いはありません。SQL 標準では両方の名前を受け入れる必要があるため、2 つの型名があります。標準をざっと見てみると、唯一の違いは次のように見えます。
17)NUMERIC specifies the data type exact numeric, with the decimal precision and scale specified by the <precision> and <scale>. 18)DECIMAL specifies the data type exact numeric, with the decimal scale specified by the <scale> and the implementation-defined decimal precision equal to or greater than the value of the specified <precision>.
つまり、DECIMAL の場合、実装では、小数点の左側に要求されたよりも多くの桁数を許可できます。Postgres はそのような自由を行使しないので、これらのタイプに違いはありません。
regards, tom lane
ページ下部のドキュメントにも明確に記載されている、
10 進数と数値型は同等です。どちらのタイプも SQL 標準の一部です。
また、エイリアステーブル decimal [ (p, s) ]
では、エイリアスとして言及されていますnumeric [ (p, s) ]