如何在数据库中存储经度和纬度。MySQL赢得';不要超过-99.9999999

如何在数据库中存储经度和纬度。MySQL赢得';不要超过-99.9999999,mysql,database,decimal,sqldatatypes,Mysql,Database,Decimal,Sqldatatypes,好的,现在我将lat和lng列存储为DECIMAL(10,8) 我正在尝试插入以下内容: -117.1779216但是它一直这样插入:-99.9999999 为什么会这样?我看到其他板都将其存储为十进制,但当我在周期前给它10位时,它不会返回更多。。。所以我认为它可以-117。。它们都没有标记为无符号。十进制列的声明语法为十进制(M,D)。MySQL 5.1中参数的值范围如下: M是最大位数(精度)。它的范围是1到65。(MySQL的旧版本允许范围为1到254。) D是小数点(刻度)右侧的位数。

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

我正在尝试插入以下内容:

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


为什么会这样?我看到其他板都将其存储为十进制,但当我在周期前给它10位时,它不会返回更多。。。所以我认为它可以-117。。它们都没有标记为无符号。

十进制列的声明语法为十进制(M,D)。MySQL 5.1中参数的值范围如下:

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

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


取自:D

将其设置为十进制(10,8),数字为
-117.1779216
。MySQL将其理解为
-117.17792160
,因为它需要8位精度,但您说它应该只有10位,因此超过99位的值将使其成为11位无效。

精度(10)-刻度(8)=2

2是小数点左边的位数

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


不,我想你会发现他们不会将其存储为十进制(10,8)。。。正是因为您遇到的问题。@AMR如果您希望使用这些数字进行运算和数学运算,则不会这样做。@AMR您的意思是什么?SQL DECIMAL中的有限数值选项可以完美地工作。您不应该将数值存储为字符串,因为它最多只能限制对这些数值的处理。@AMR将数值数据存储在字符串中几乎总是一个糟糕的主意。是的,我看到。。。不知道这有什么帮助。(11,8)表示经度,而(10,8)表示纬度。希望OP能阅读你的答案,因为他们无法阅读你答案的手册。真的吗?您的位数大于允许的小数位数,因此它将填充它所能接受的最低值。@veelen不必麻烦了。希望你永远不要和那个人一起工作。@veelen荷兰的生活怎么样?也许你必须指出这种规模的增加是如何起作用的?:)你得到了5张以上的选票,完全是因为青蛙克米特。我一直在等着用他。他绝对是我从来没想过会在堆栈溢出上看到的。