gpt4 book ai didi

mysql - 检查 mysql 中格式正确和/或有效的几何图形

转载 作者:行者123 更新时间:2023-12-01 10:00:49 27 4
gpt4 key购买 nike

将包含几何数据的 MariaDB 表迁移到 MySql,无法插入某些数据,因为它们的格式不正确,即使这对 MariaDB 来说不是问题。

此请求适用于 MariaDB (10.2)。

CREATE TABLE IF NOT EXISTS geo (
id INT AUTO_INCREMENT NOT NULL,
value GEOMETRY NOT NULL,
SPATIAL INDEX idx_value (value),
PRIMARY KEY(id)
) ENGINE = InnoDB;
INSERT INTO geo (value) SELECT ST_GeomFromText('LINESTRING(1 2)');

MySql (5.7.20) 上没有,错误是:

3037 - Invalid GIS data provided to function st_geometryfromtext.

在 MySql 中有 3 个函数来识别这样的几何图形:ST_IsSimple()ST_IsValid()ST_Validate() 但它们不' 处理格式错误的几何图形:

SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_IsValid(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_AsText(ST_Validate(ST_GeomFromText('LINESTRING(1 1)')));

3055 - Geometry byte string must be little endian.

本例来自https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html ,但它不起作用。所以很奇怪(该文档未针对 5.7 更新)。有关 mysql 有效性的更多详细信息:https://dev.mysql.com/doc/refman/5.7/en/geometry-well-formedness-validity.html (mysql 接受任何语法上格式正确的输入,但不接受几何上无效的输入)。

这里有类似的问题:

但他们都没有回答这个问题:如何在 mysql 5.7 上识别格式错误的几何图形?

最佳答案

LineString 至少需要两个点。也许 5.6 疏忽地指出了这一点。

mysql> SELECT hex(ST_GeomFromText('LINESTRING(1 1)'));
ERROR 3037 (22023): Invalid GIS data provided to function st_geometryfromtext.

mysql> SELECT hex(ST_GeomFromText('LINESTRING(1 1, 2 3)'));
+--------------------------------------------------------------------------------------------+
| hex(ST_GeomFromText('LINESTRING(1 1, 2 3)')) |
+--------------------------------------------------------------------------------------------+
| 00000000010200000002000000000000000000F03F000000000000F03F00000000000000400000000000000840 |
+--------------------------------------------------------------------------------------------+

mysql> SELECT @@version;
+-----------+
| @@version |
+-----------+
| 5.7.15 |
+-----------+

关于mysql - 检查 mysql 中格式正确和/或有效的几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com