【问题标题】:Database storage of longitude/latitude values in SQL Server: decimal(2, ?)SQL Server 中经度/纬度值的数据库存储:十进制(2,?)
【发布时间】:2011-06-25 16:13:15
【问题描述】:

在我看到的表定义中:

Latitude     ->    varchar(50)
Longitude    ->    nvarchar(50)

显然,我立即质疑这背后的想法 - 肯定这些值实际上是本质上的数字。长话短说:我假设这些将是数字的,实际上是十进制的,我们将放弃“思维在字符串中”的哲学。

现在对于我的困境来说,我只是继续输入:

Latitude    ->    decimal(2, 4)

但请稍等,4 不对,对吧?正确的。所以我想在意识到68 可能不会削减它之前(我可能会在一瞬间补充)之前我已经达到了门槛。所以,第一件事就是……

我坚持我们甚至要这样做是对的吗?如果是这样……

应该将这些值存储到什么精度以确保我们可以持久保存要插入的整个值?例如,规范中有没有预定义的东西?

我不只是想使用像Latitude -> decimal(2, 16) 这样的东西,因为原则上它和decimal(2, 2) 一样有缺陷。并且专门针对经度出现了类似的问题,但我假设一个答案对另一个就足够了,即decimal(3, answer)

我们使用的是 MSSQL Server 2005。

看来我是通过手动经验自学 SQL Server,因此使这个问题的某些部分变得无关紧要:无论如何,我只能使用 decimal(x, max(x)) 而不是 decimal(x, y)!将保留问题以供输入。

【问题讨论】:

  • 您使用的是什么版本的 SQL Server? 2008 内置了一些原生地理空间类型,适用于笛卡尔和椭圆体场景。它们分别称为几何和地理。
  • 然后使用十进制类型,请参阅 Cade Roux 的链接

标签: sql sql-server types geocoding


【解决方案1】:

Decimal(2, 4) 表示总精度为 2 位,小数点后 4 位。 SQL Server 不会让你这样做,但我认为它意味着你可以存储从 -0.0099 到 0.0099 的值。

我推荐十进制(9, 6)。这将在赤道以大约 1/6 英寸的精度存储。使用 9 或更少作为精度需要 5 个字节的存储空间,使用 10-19 需要 9 个字节。

【讨论】:

    【解决方案2】:

    sql server 中小数的最大精度目前是 38。比例可以达到 38。最大时,一个小数将占用 17 位,而 varchar 占用任何长度加 2。所以如果您使用了 varchar(38),最多可以占用 40 位数据。另一方面,varchar 的大小不像小数那样受到限制。所以你真正需要做的是弄清楚你要允许多少小数点,然后找出你的数据类型。

    Source Info

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2010-12-26
      • 2011-09-05
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多