在MySQL数据库中存储经纬度的数据类型是什么?

8

我正在设计一个MySQL表,用于存储用户列表和Google地图的坐标(经度和纬度)。

我需要两个字段存储吗?还是只需要一个字段就可以了?

我不知道应该使用什么数据类型,是使用float、decimal、GEOMETRY还是存在新的数据类型?选择最佳数据类型有哪些优缺点?


3个回答

5
你可以在mysql中使用空间扩展,数据类型是 这将使搜索更快,并提供许多地理操作功能。

1
这是存储该数据类型的最佳解决方案。 - Ahmed el-Gendy

3
这篇博客介绍了一种正确且快速的方法:

http://www.rooftopsolutions.nl/blog/229

CREATE TABLE geo (
  longitude DOUBLE,
  latitude DOUBLE,
  idxlong SMALLINT,
  idxlat SMALLINT,
  INDEX (idxlong,idxlat);
);

第二部分内容包括一个基准测试:http://www.rooftopsolutions.nl/blog/230
method  small   medium  large
plain select        1.73s
index on latitude       0.72s
using point field       9.52s
using point field + spatial index   0.00s   0.73s   18.82s
using morton number     0.78s
index on morton 0.00s   0.65s   3.23s

此外还有第三部分的实践: http://www.rooftopsolutions.nl/blog/231

注意,使用以下方法将经度和纬度列转换为“空间启用”列非常容易:--添加空间化 - Ahmed el-Gendy

2
您可以使用以下方式之一:
  • 一对DECIMAL(11, 8)(小数点前3位,小数点后8位)
  • 一对FLOAT
请注意,十进制列可以存储精确值,而浮点列存储的是该值的近似值。例如,1.999999将在十进制列中存储为1.999999,但在浮点列中存储为2.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接