检查mysql中格式良好和/或有效的几何体
将带有几何数据的MariaDB表迁移到MySql时,某些数据无法插入,因为它们的格式不正确,即使这对MariaDB来说不是问题 此请求适用于MariaDB(10.2)检查mysql中格式良好和/或有效的几何体,mysql,mariadb,gis,mysql-5.7,wkt,Mysql,Mariadb,Gis,Mysql 5.7,Wkt,将带有几何数据的MariaDB表迁移到MySql时,某些数据无法插入,因为它们的格式不正确,即使这对MariaDB来说不是问题 此请求适用于MariaDB(10.2) 创建表(如果不存在)( id INT自动增量不为空, 值几何体不为空, 空间索引idx_值(值), 主键(id) )引擎=InnoDB; 插入地理位置(值)选择ST_GeomFromText('LINESTRING(1-2)'); 不在MySql(5.7.20)上,错误是: 3037-为函数st_geometryfromtext
创建表(如果不存在)(
id INT自动增量不为空,
值几何体不为空,
空间索引idx_值(值),
主键(id)
)引擎=InnoDB;
插入地理位置(值)选择ST_GeomFromText('LINESTRING(1-2)');
不在MySql(5.7.20)上,错误是:
3037-为函数st_geometryfromtext提供的GIS数据无效
MySql中有三个函数可以识别此类几何体:ST_IsSimple()
、ST_IsValid()
、和ST_Validate()
,但它们不适用于格式不正确的几何体:
选择ST_IsSimple(ST_GeomFromText('LINESTRING(12)');
选择ST_IsValid(ST_GeomFromText('LINESTRING(12)'));
选择ST_AsText(ST_验证(ST_GeomFromText('LINESTRING(1))));
3055-几何体字节字符串必须是小端
此示例来自,但不起作用。所以很奇怪(5.7版的文档没有更新)。关于mysql有效性的更多细节:(mysql接受任何语法良好的输入,但不接受几何无效的输入)
类似问题如下:
- ,答案是:MySQL提供的测试几何体有效性的函数需要格式良好的几何体作为输入李>
- ,其中有使用存储函数和创建异常处理程序的想法,所以有点复杂
- 错误报告询问相同问题,但没有响应:
- (php orm),也就是说结果在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 |
+-----------+
所有这些评论都应该是对你的问题的编辑。什么操作系统和硬件?@RickJames它是ubuntu 16.04,但它与mysql 5.7相关,而不是与操作系统相关。mysql 5.7将后端更改为管理几何体,因此从5.6或从mariadb升级时会出现问题。事实上,mysql 5.6和mariadb并不关心格式错误的wkt。他们按原样存储它们。那么,你有没有一个想法,要求识别所有形状不良的几何图形?