如何在数据库中存储经度和纬度。 MySQL不会超过-99.9999999 [关闭]

Posted

技术标签:

【中文标题】如何在数据库中存储经度和纬度。 MySQL不会超过-99.9999999 [关闭]【英文标题】:How to store longitude and latitude in database. MySQL won't go further than -99.9999999 [closed] 【发布时间】:2013-12-31 04:14:48 【问题描述】:

好的,现在我将 lat 和 lng 列存储为 DECIMAL(10,8)

我正在尝试插入这个:

-117.1779216 但是它一直这样插入:-99.99999999

这是为什么?我看到其他所有板都将其存储为十进制,但是当我在该期间之前给它 10 个位置时,它不会再返回了……所以我认为它可能会变为 -117 .. 它们都没有被标记为 @ 987654325@任一。

【问题讨论】:

Read the manual. 不,我想您会发现他们不会将其存储为 DECIMAL(10, 8)...正是因为您遇到的问题。 @AMR 如果您希望使用这些数字进行数学运算,则不要。 @AMR 你是什么意思 SQL DECIMAL 中有限的数字选项可以完美地工作。您不应该将数值存储为字符串,这充其量限制了可以使用这些值完成的操作。 @AMR 在字符串中存储数字数据几乎总是一个糟糕的主意。 【参考方案1】:

精度 (10) - 比例 (8) = 2

2 是小数点左边的位数

如果你提高精度,你可以在小数点左边有更多的数字。

【讨论】:

也许你必须指出这种规模的增加是如何运作的? :) 仅仅因为青蛙柯米特,您就获得了 5 次以上的支持。 @NobleUplift 我一直在等待使用他。 他绝对是我从没想过会在 Stack Overflow 上看到的东西。【参考方案2】:

DECIMAL 列的声明语法是 DECIMAL(M,D)。 mysql 5.1 中的参数取值范围如下:

M 是最大位数(精度)。它的范围是 1 到 65。(旧版本的 MySQL 允许的范围是 1 到 254。)

D 是小数点右侧的位数(刻度)。取值范围为 0 到 30,且不得大于 M。

取自manual:D

【讨论】:

是的,我明白了...不知道这有什么帮助。 (11,8) 用于经度,而 (10,8) 用于纬度 希望 OP 阅读您的答案,因为他们无法阅读您的答案来自的手册。 认真的吗?您的位数大于允许的小数,因此它会填写它可以取的最小值。 @veelen 不要打扰。只是希望你永远不必与那个人一起工作。 @veelen 在荷兰过得怎么样?【参考方案3】:

您将其设置为DECIMAL(10,8),编号为-117.1779216。 MySQL 将其读取为-117.17792160,因为它需要 8 位精度,但您说它应该只有 10 位,所以任何超过 99 的都使它成为 11 位并且无效。

【讨论】:

以上是关于如何在数据库中存储经度和纬度。 MySQL不会超过-99.9999999 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Mysql 中存储经度/纬度的数据类型

存储纬度和经度的最佳 mysql 数据类型是啥?

需要使用 PHP 将 android app 生成的纬度和经度值存储到 mySQL 数据库中

mysql存储地图经纬度的表怎么设计?

将经度和纬度数据存储在数据库中,并查询附近的记录

如何从纬度/经度获取附近的位置?