Mysql 如何纠正;无法从发送到“几何体”字段的数据中获取几何体对象;恢复PHPMyAdmin备份时?

Mysql 如何纠正;无法从发送到“几何体”字段的数据中获取几何体对象;恢复PHPMyAdmin备份时?,mysql,phpmyadmin,database-restore,Mysql,Phpmyadmin,Database Restore,我有一些数据库使用MySQL中的点域来存储几何体数据。所有数据都以相同的方式添加: GeomFromText( 'POINT( lat lng )' ) 所有数据库的备份和恢复都没有问题,只有一个例外。此数据库与其他数据库位于同一服务器上,但位于单独的CPanel帐户中 当我尝试还原该数据库时,出现以下错误: “无法从发送到几何体字段的数据中获取几何体对象” insert语句的一个示例是: INSERT INTO `location` (`id`, `coords` , `new_coords

我有一些数据库使用MySQL中的点域来存储几何体数据。所有数据都以相同的方式添加:

GeomFromText( 'POINT( lat lng )' )
所有数据库的备份和恢复都没有问题,只有一个例外。此数据库与其他数据库位于同一服务器上,但位于单独的CPanel帐户中

当我尝试还原该数据库时,出现以下错误: “无法从发送到几何体字段的数据中获取几何体对象”

insert语句的一个示例是:

INSERT INTO `location` (`id`, `coords` , `new_coords`) VALUES
(1, '\0\0\0\0\0\0�a��[XJ@�˶x��', '\0\0\0\0\0\0�8z�%XJ@g�+����' ),
(3, '\0\0\0\0\0\0�n�w�/J@6���', '\0\0\0\0\0\0�n�w�/J@6���' ),
(4, '\0\0\0\0\0\0�  ��@J@.����', '\0\0\0\0\0\0� ��@J@.����');
我已经检查了数据,当我运行此查询时,所有数据似乎都显示了有效的纬度和经度:

SELECT X( coords ) , Y( coords ) FROM location
一些记录返回0和0。所以我尝试将它们更新为NULL,但仍然得到相同的错误

当我尝试导出时,无论是否勾选“转储十六进制表示法中的二进制列”选项,我也会得到相同的错误

是否存在可能导致此问题的设置,或者只是数据中的某些内容

如果是数据,那么修复方法是什么

提前感谢:)

这是使用PHPMyAdmin 4.8.3从PHP7.2.7上的Linux MariaDB服务器(10.1.37-MariaDB)导出,并使用PHPMyAdmin 4.8.3使用PHP7.2.10导入到WAMPServer 3.1.4(10.3.9-MariaDB)。
请注意,这在WAMPServer 3.0.8上也不起作用,我找到了一个解决方案,不过最好首先找出问题的原因。我使用PHP从数据库中提取数据,然后仅使用POINT()而不是GeomFromText('POINT()')重新保存数据

1) 查询数据库中的数据:

SELECT id , X( coords ) AS x , Y( coords) AS y FROM location
2) 循环遍历行并将数据存储在变量中。将任何空lng/lat转换为0:

$id = (int) $row['id'];
$x = ($row['x'] == "") ? 0 : $row['x'];
$y = ($row['y'] == "") ? 0 : $row['y'];
3) 使用POINT()更新数据:

4)考虑如果使用MySQL 5.1.35或更高版本,则更改插入代码以使用Posit(),而不使用任何GEOMO函数(GEOMOFROWKB/GEOMFROM文本)。


之后,您的备份应该可以了。

备份来自哪个mysql/mariaDB版本?你打算去哪里?备份中导致错误的SQL语句是什么?您好,感谢您的回复。我在上面添加了更多细节。“来自”MariaDB版本:10.1.37。“至”WAMPServer 3.1.4(10.3.9-Maria DB)。在WAMPServer 3.0.8上也不起作用,因为它似乎不使用MariaDB。上面是MySQL插入代码示例。是否有在base64中导出二进制数据的选项?在我看来,这就像编码或误解问题。可能windows在0字节方面有问题。有“以十六进制表示法转储二进制列”,但它在打开或关闭时不起作用。我已经重新保存了所有的数据,它工作正常,我将添加一个解决方案。Thx用于此问题。我遇到了同样的问题,我的CREATETABLE语句将位置字段设置为POINT type,location`POINT DEFAULT NULL;insert语句将“\0\0\0\0\0\0\0\208on\u%º?0žACÁI@”作为值传递。我使用的是mySQL Workbench v8.0,可能值得检查您的存储引擎和排序规则。作为参考,我使用InnoDB和latin1_swedish_ci。
UPDATE location SET coords = POINT( ".$x." , ".$y." ) WHERE id = ".$id