SQL Server 2012にメトリックデータ(メートル、キロメートル、平方メートル)を保存しようとしています。
使用するのに最適なデータ型は何ですか?float
(C#:double)、decimal
(C#:decimal)またはgeometry
?または何か違う?
SQL Server 2012にメトリックデータ(メートル、キロメートル、平方メートル)を保存しようとしています。
使用するのに最適なデータ型は何ですか?float
(C#:double)、decimal
(C#:decimal)またはgeometry
?または何か違う?
decimal
データに適切な精度のa 、またはint
適切な場合はタイプのいずれか
それは完全にアプリケーションとそれに必要な精度に依存します。
アーキテクチャについて話している場合、精度のニーズは比較的限られておりC# 32-bit float
、長い道のりが必要になります。SQLでは、これはに変換さfloat(24)
れ、データベースタイプとも呼ばれますreal
。このSQLDBタイプでは、エントリごとに4バイトのストレージが必要です。
代わりに、地球の表面上のポイントに対処する場合は、はるかに高い精度が必要です。ここでaC# double
が適切であり、これはaSQL float(53)
またはちょうどに対応しfloat
ます。このSQLDBタイプは8バイトのストレージを必要とし、必要な場合、またはアプリケーションが小さく、ディスク/メモリの使用量が問題にならない場合にのみ使用する必要があります。
これSQL Decimal
は実際のSQLDBの良い代替手段になる可能性がありますが、2つの欠点があります。
C# Decimal
これは、財務上の使用と丸め誤差を防ぐために設計されたタイプであるに対応します。この設計では、三角法などで使用すると、C#Decimal型がfloat / doubleよりも遅くなります。もちろん、これをコード内で前後にキャストすることもできますが、これはIMOの最も簡単なアプローチではありません。「10進値タイプは、多数の重要な整数および小数桁を必要とし、丸め誤差がない財務計算に適しています。」-MSDN :10進構造
Decimal
では、エントリごとに5〜9バイトのストレージが必要です(使用する精度によって異なります)。これは、float(x)の代替手段よりも大きくなります。float(24)
(別名)を選びます。参照:floatおよびreal(Transact-SQL)real
C# float
最後に、.NetとSQLの間でさまざまなタイプを変換するための役立つリソースを次に示します。SqlDbType列挙
floatまたはdoubleは、正確でないデータ型(5.0 == 5.0は丸めの問題によりfalseになる可能性があります)および
Decimalは正確なデータ型(5.0 == 5.0は常にtrue)
およびGeometry / Geography(easy言った)は地図上の場所のためのものです。
地理はバイナリデータであり、投影に関する情報(ここではすべてマップに関する情報が含まれます)と小数は技術的にはフロートほど扱いにくいため、フロートの計算は3つのうちで高速である必要があります。