【问题标题】:MySQL Spatial Queries not working when migrated from MySQL 5.7.26 to MySQL 8.0.23从 MySQL 5.7.26 迁移到 MySQL 8.0.23 时,MySQL 空间查询不起作用
【发布时间】: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


    【解决方案1】:

    我会检查纬度:经度顺序。 MySql 8 遵循 CRS 定义的 4326 的 lat:lon 顺序。假设您的数据位于英格兰而不是印度洋,您应该交换坐标顺序。还要检查其他数据是否存在相同问题。

    另请参阅 https://mysqlserverteam.com/axis-order-in-spatial-reference-systems/

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多