【发布时间】:2010-09-14 15:03:28
【问题描述】:
考虑到我将在纬度/经度对上执行计算,哪种数据类型最适合与 MySQL 数据库一起使用?
【问题讨论】:
-
我发现这个链接非常有用:howto-use-mysql-spatial-ext.blogspot.com/2007/11/… 它可能有点旧,但它包含一个完整的解释,包括示例。
-
恕我直言,这里的大多数人都不明白会发生什么。只要应用程序代码接触一个数字,只要一个使用双精度数(大多数情况下都是这样),该数字最多变成双精度数。然后用一百万个小数存储它不会有任何好处。使用有限个小数(例如6)破坏该精度的一部分并添加累积错误每次将其重新写入数据库时。 double 携带 ca 16 个有效数字,可能都是小数。随着时间的推移,废弃其中的 10 个会产生累积的错误。出于某种原因,它是“浮点”。续。
-
续:当存储从外部来源获取的、未更改的第一次作为源材料的数字时,6 位小数可能是可以的。但是,如果对它执行一次计算并再次存储它,则通过强制执行特定的十进制格式来删除部分精度是愚蠢。仅在服务器内部执行计算可能会有所不同(服务器可能会或可能不会在内部使用除 double 之外的其他东西),并且在 c 的应用程序计算中使用比 double 更差的数字表示同样减少了对存储精度的需求。
-
续:如果服务器以 更高 精度存储数字,尽管声称“9.6”(我不知道它是否确实如此) ),那么所有这些都不重要,格式纯粹是为了方便 - 与精度问题无关。但是,如果服务器实际上使用该格式将任何数字四舍五入为 6 位小数精度,我不会感到惊讶。
-
续:最后:对于 lat,lon's,第 6 位小数是 捕捉 到 ca 的问题。 11 厘米网格。每次读取(触摸)、计算和存储时,使用 6 位小数,将有一个新的捕捉(= 累积误差)。如果所有的错误都发生在同一个方向,就会出现一个big错误。如果对其执行临时乘法(例如,放大,然后减去和缩小),它可能会变得更大。没有好的理由,不要放弃精度!
标签: mysql database-design maps mapping latitude-longitude