在SQL数据库中存储度量标准数据时要使用的数据类型是什么?

SeT*_*ToY 5 c# sql-server sqldatatypes sql-server-2012

我正在尝试在SQL Server 2012中存储度量数据(米,公里,平方米).

什么是最好的数据类型?float(C#:double),decimal(C#:十进制)甚至geometry?或者不同的东西?

Ava*_*vra 3

这完全取决于应用以及您需要的精度。

如果我们谈论架构,那么精度需求相对有限,并且C# 32-bit float会带你走很长的路。在 SQL 中float(24),这也称为数据库类型real。此 SQL DB 类型每个条目需要 4 个字节的存储空间。

如果我们想要定位地球表面的点,则需要更高的精度。这里 aC# double是合适的,它对应于 aSQL float(53)或只是float。此 SQL DB 类型需要 8 个字节的存储空间,并且仅应在需要时或者应用程序较小且不关心磁盘/内存使用情况时使用。

SQL Decimal可能是实际 SQL 数据库的一个很好的替代方案,但有两个缺点:

  1. 它对应于一种C# Decimal专为财务用途而设计的类型,以防止舍入错误。当在三角方法等中使用时,这种设计使 C# Decimal 类型比 float/double 慢。您当然可以在代码中来回转换它,但这不是最直接的方法 IMO。

    “小数值类型适用于需要大量有效整数和小数位并且没有舍入错误的财务计算。” - MSDN:十进制结构

  2. SQL DB 类型Decimal每个条目需要 5-9 个字节的存储空间(取决于所使用的精度),这比 float(x) 替代方案更大。
因此,请根据您的需要使用它。在您的评论中,您声明它与房地产有关,所以我会选择float(24)(又名real),它恰好是 4 个字节并直接转换为C# float. 请参阅:浮点数和实数 (Transact-SQL)

最后,这里有一个有用的资源,用于在 .Net 和 SQL 之间转换不同类型:SqlDbType Enumeration