7

我最近创建了一个带有 GEOMETRY 类型列的 MySQL 表。

当我使用 mysqldump 备份表时,它会将我的几何列输出为带引号的字符串,其中包含一些转义字符,如 \0,以及一些看起来像大 ASCII 范围内的原始二进制字节的字符。

当我尝试将转储恢复到另一个数据库时,它失败并出现错误:

“无法从您发送到几何字段的数据中获取几何对象”。

我尝试将 --hex-blob 添加到我的命令行,但这不会改变输出或解决问题。

我敢肯定有人没有在 MySQL 中创建数据类型并且忘记包含备份它的方法。我错过了什么?

谢谢。

4

4 回答 4

4

In my case, this error appeared specifically with empty geometry values in a non-null geometry column.

In my case, the empty geometries were legitimate cases of unknown geometry, so I addressed this by changing the column to allow null values, and then running UPDATE ... SET geom = NULL WHERE IsEmpty(geom);

After this, I was able to re-run mysqldump and successfully import the resulting sql into a separate database.

(To be honest, I'm not sure how the empty geometry values got there in the first place - I don't even know the syntax to create an empty geometry value)

于 2016-01-08T09:45:09.693 回答
3

弗兰克,这似乎是 mysqldump 的一个长期存在的(并且仍然是开放的)错误。请参阅http://bugs.mysql.com/bug.php?id=43544

作为一种解决方法,您可以使用 ogr2ogr 工具将数据导出到 shapefile,然后将其导入回数据库。请参阅http://www.bostongis.com/PrinterFriendly.aspx?content_name=ogr_cheatsheet

于 2013-07-05T04:31:39.673 回答
2

我可以确认在 MySQL Workbench 中使用导出/导入数据功能时不会出现此问题。http://www.mysql.com/products/workbench/

于 2014-03-10T17:01:36.973 回答
-1

我曾经遇到过这个问题,但通过使用 gzip 设法通过。请检查我的示例命令: 导出:

mysqldump -u root -p db_name | gzip > dump.sql.gz

进口:

pv dump.sql.gz | gunzip | mysql -u root -p other_db
于 2019-10-03T09:44:26.123 回答