我已经在Google上做过研究,并在Stack Overflow上阅读了一些答案。 DECIMAL
是存储纬度和经度数据的不错选择。
但人们对小数点前后的数字位数有不同的看法。
纬度范围最多可以是2位数(-90和90),经度范围最多可以是3位数(-180和180)。
我从Restful API获得的小数点后的数字是12位数。
因此,数据库列可以如下。
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
如果数字增加,我可以安全地设置更多的最大数字如下。
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
这样,lat
和lon
都可以存储高达xxxx.xxxxxxxxxxxxx
的数据,因此小数点前的4 digits
和小数点后的13 digits
。它是否具有MySQL中的性能导入并且没有必要?因为lat range is -90 and 90
和lon range is -180 and 180
所以设置它们我觉得很愚蠢,但我感觉更安全。但与此同时我关注的是性能。
或者只是将它们设置为:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
而且无需担心任何事情,因为这对于存储纬度和经度数据已经完全安全了吗?
即使是12位也是荒唐可笑的。我推荐以下之一:
DECIMAL(8,6)/(9,6)
足以区分两个站在一起的人。我怀疑GPS不是那么精确。总计:两列的9个字节。
除了没有垂直组件外,DECIMAL(6,4)/(7,4)
足以满足房屋或企业的需求。 7个字节。
关于lat / lng精度的更多讨论:http://mysql.rjweb.org/doc.php/latlng#representation_choices或https://stackoverflow.com/a/50126941/1766831
至于性能,没有太大的区别。以下是要点:
你提到的其他尺码:
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
总共需要16个字节。同时,这对:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
只小一个字节!