2010-01-27 41 views
6

我有一個城市名稱的數據集,其中包含我們加載到MySQL表中的相應緯度/經度,如下所示:如何正確地將緯度/經度數據導入MySQL?

city_id | city_name |緯度DECIMAL(9,6)|經度DECIMAL(9,6)

典型的緯度/經度座標可能如下所示:54.284758/32.484736。

但是,我只得到一個2的值才能正確顯示在我的表中,換句話說,等價於DECIMAL(5,2)。爲了UTF-8的目的,數據從已從OpenOffice Calc導出的文本CSV上傳。我知道OpenOffice在小數點上有一些問題,但是完全的緯度/經度肯定在導出的CSV中。如果我用記事本打開CSV,數據就沒有問題。

任何人都可以看到我可能做錯了什麼?

謝謝。

更新: 得到它的工作,感謝所有的輸入。我重新創建了一切,從頭開始,新的模式文件(我使用的是ORM),新的CSV導出,新的表格,新的LOAD DATA INFILE,並且它使用正確的十進制輸出。打敗我。

+0

當你在表中說「不正確」時,你的意思是當你在MySQL提示符下鍵入「SELECT * FROM mytable」時?或者你有一個觀衆? – Tenner 2010-01-27 15:41:37

+0

@Tenner ....我使用的MySQL工作臺,但結果是相同的,當我通過PHP拉一個座標。 – Tom 2010-01-27 15:49:30

+0

考慮到數據類型爲'DECIMAL(9,6)',並且在記事本中查看時CSV是正確的 - 某些東西與您用來導入數據的東西有關。看看如何使用MySQL LOAD DATA INFILE來避免遇到的任何問題:http://dev.mysql.com/doc/refman/5.1/en/load-data.html – 2010-01-27 15:56:14

回答

5

這可能是爲你的需要矯枉過正,但是在處理地理數據時,你可能要考慮使用MySQL Spatial Extensions

我會補充一點,您當前使用的數據類型足以表示數據,因爲它在CSV文件中。導入器中有一些東西在導入時將其切斷,或者無論您用什麼來查看數據都會截斷它。

+0

謝謝,看看早些時候.....它有點矯枉過正:) – Tom 2010-01-27 15:59:45

1

我建議使用字符串數據類型如varchar來存儲Lat,Long。我正在開發一個廣泛使用這些座標的應用程序,並且我沒有遇到將它存儲爲字符串的任何問題。將其存儲爲一個數字,您將遇到精確問題。

只是要考慮。

+0

謝謝盧卡斯。精確度問題是什麼意思?我不會以非常嚴格的方式使用這些數據。只能在上面生成一些Google地圖座標和迷你應用程序。我會認爲6的比例非常準確? – Tom 2010-01-27 15:34:52

+2

你如何排序?或在半徑內搜索? 看起來像將這些字符串存儲爲字符串會導致大量不必要的運行時間轉換。 – Tenner 2010-01-27 15:40:32

+0

精確明智,我會建議使用一個字符串或一個足夠大的小數。例如使用float可能會發生以下情況。我有從Bing地圖返回的此座標,43.371240452765925將該值存儲爲43.3712404527659的浮點值。這不是一個巨大的錯誤,但它是一個錯誤。至於排序,T-SQL使用字典順序排序,這意味着字符串和數字將以類似的方式排序,所以不需要投射。 – Lukasz 2010-03-24 03:10:08

0

爲什麼不直接聲明字段在你的MySQL表中有DOUBLE類型?小數點後的數字和數字的限定符是可選的。

+0

謝謝,稍後會嘗試,但像MySQL手冊說的,當需要精確的精度時,DOUBLE/FLOAT不是正確的格式,而DECIMAL是。 – Tom 2010-01-27 16:03:16