请记住,我将在lat/long对上执行计算,哪种数据类型最适合与MySQL数据库一起使用?
在ANSI SQL兼容数据库中存储纬度或经度数据时,哪种数据类型最合适?应该float使用,或decimal,或......?
我知道Oracle,MySql和SQL Server已经添加了一些专门用于处理地理数据的特殊数据类型,但我对如何将信息存储在"普通的"SQL数据库中感兴趣.
为什么有些数字在存储为浮点数时会失去准确性?
例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)的比率,两者都可以用二进制(0b1011100/0b1010)精确表示.但是,存储为浮点数的相同比率永远不会完全等于9.2:
32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875
Run Code Online (Sandbox Code Playgroud)
这样一个看似简单的数字如何在64位内存中表达"太大" ?
检查新的数据库结构我看到有人将字段从float更改为double.想知道为什么,我检查了mysql文档,但老实说不明白有什么区别.
谁能解释一下?
表现问题......
我有一个拥有地理定位数据(经度和纬度)的房屋数据库.
我想要做的是找到使用InnoDB数据库引擎将位置数据存储在我的MySQL(v5.0.24a)中的最佳方法,以便我可以执行大量查询,其中我将返回所有之间的所有主记录x1和x2 latitude以及y1和y2 longitude.
现在,我的数据库架构是
---------------------
Homes
---------------------
geolat - Float (10,6)
geolng - Float (10,6)
---------------------
Run Code Online (Sandbox Code Playgroud)
我的疑问是:
SELECT ...
WHERE geolat BETWEEN x1 AND x2
AND geolng BETWEEN y1 AND y2
Run Code Online (Sandbox Code Playgroud)
更新:仍然没有答案
我在下面有3个不同的答案.一个人说要用Float.一个人说要使用INT.一个人说要使用Spatial.
所以我使用MySQL"EXPLAIN"语句来衡量SQL的执行速度.如果使用INT或FLOAT用于经度和纬度数据类型,似乎绝对没有SQL执行(结果集提取)的差异.
使用" BETWEEN"语句似乎比使用" >"或" <"SQL语句要快得多.使用" BETWEEN"比使用" >"和" <"语句快近3倍.
话虽如此,我仍然不知道如果使用Spatial会对性能产生什么影响,因为我不清楚它是否支持我运行的MySQL版本(v5.0.24)......以及我如何支持它如果支持.
任何帮助都会受到极大的欢迎