【发布时间】:2021-06-28 07:04:33
【问题描述】:
我不是 MySQL 专家,所以毫无疑问我忽略了一些简单的事情。
我有一个 MySQL DB (V 5.7.26),如果我在我的一张表上运行以下查询(例如),我会得到 39 的结果,这是我所期望的:
SELECT count(*)
FROM `entities`
WHERE
ST_CONTAINS(
ST_GeomFromText('POLYGON((-0.4120 51.6009, -0.4120 51.3467, 0.1533 51.3467, 0.1533 51.6009, -0.4120 51.6009))', 4326),
gloc
) = 1;
我在 MySQL V 8.0.23 中创建了相同的数据库,并通过导出表定义并通过在新数据库中运行查询来重新创建它们,所以据我所知,表定义等是相同的。
我将相同的数据导入到新数据库中,并且我知道数据是正确的,例如,如果我按另一个标准提取记录(例如按记录 ID 选择),我可以在地图(传单)上显示记录并且它位于正确的位置。
但是,如果我在我的新数据库中运行与上述相同的查询,它返回的结果为 0。
如果我遗漏了 4326 的 SRID,那么我会收到一个错误(这是我所期望的)
/* SQL Error (3033): Binary geometry function st_contains given two geometries of different srids: 0 and 4326, which should have been identical. */
/* Affected rows: 0 Found rows: 0 Warnings: 0 Duration for 0 of 1 query: 0.000 sec. */
所以我认为这不是 SRID 问题。
gloc 被定义为“几何”类型,允许 NULL 值,但不存在。但是,如果我不允许 NULL 值,然后将空间索引添加到 gloc 列,则结果完全相同。
【问题讨论】:
标签: mysql gis geospatial spatial