Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查mysql中格式良好和/或有效的几何体_Mysql_Mariadb_Gis_Mysql 5.7_Wkt - Fatal编程技术网

检查mysql中格式良好和/或有效的几何体

检查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

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

此请求适用于MariaDB(10.2)

创建表(如果不存在)(
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。他们按原样存储它们。那么,你有没有一个想法,要求识别所有形状不良的几何图形?