2011-02-11 68 views
6

在表定義我看到:經度/緯度值的數據庫存儲在SQL Server:十進制(?2)

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)反正!將問題留作輸入。

+2

您使用的是哪個版本的SQL Server? 2008年爲笛卡爾和橢球場景構建了一些本地地理空間類型。他們分別被稱爲幾何和地理。 – 2011-02-11 16:24:01

回答

19

十進制(2,4)指的精度2個總位數和4小數點後面。 SQL Server不會讓你這樣做,但我認爲意味着你可以存儲從-0.0099到0.0099的值。

我推薦小數(9,6)。這將以低至赤道1/6英寸的精度存儲。由於精度需要9個或更少,因此需要5個字節的存儲空間,使用10-19需要9個字節。

1

sql server中小數點的最大精度是38,最大可以達到38.在最大值時,小數點會佔用17點,其中varchar會佔用任何長度加2。如果你使用varchar(38),那麼它最多隻能佔用40位數據。另一方面,varchar的大小不像小數那樣受限制。所以你真正需要做的是計算你將允許多少個小數點,然後找出你的數據類型。

Source Info

相關問題