如何在数据库的FLOAT(10,8)列中存储数字(120)?

时间:2018-07-24 11:11:29

标签: mysql

我有private Task OnUserInformationReceived(UserInformationReceivedContext c) { var userId = c.User.Value<string>("sub"); var dbContext = c.HttpContext.RequestServices.GetService<YourDbContext>(); // Use dbContext here. return Task.CompletedTask; } longitude latitude120。它们以-128.67500305的形式保存在数据库中。如何发送经度= 120到MySQL数据库?在这里,我使用Go for API。当我向数据库发送经度= 120时,它显示错误“列'经度'超出范围值”。有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

请勿使用float数据类型保留确切的数字值

Float是一种不精确的( floating )数学存储机制。在用于存储特定十进制值的MySQL上,您应该使用 DECIMAL 数字类型。

我意识到这令人困惑,因为float在PHP中可能会引起混淆,而在其他地方则表示整数之间的十进制数。

示例:

Latitude DECIMAL(11,8) SIGNED

这将存储一个11位数的值,小数点后为8位数。如:

  

-128.67500305

它永远不会舍入该值,但是会自动切掉任何超过设置长度(11位)的多余数字

参考文献:

Read here关于十进制数据类型。

Read here一个非常相似的问题

Read here来自MySQL的有关如何存储Float数据的建议。

另请参见this question/answer,该指南实际上建议使用空间数据类型存储纬度/经度值。

答案 1 :(得分:2)

尽管还有其他有用的指南,说明了将哪种数据类型用于地理坐标,但特定的错误就在您的问题中-“超出范围的值”

MySQL中的FLOAT(10, 8)类型只能存储±100.0范围内的值。