如何在数据库中存储经度和纬度。 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章