我最近创建了一个带有GEOMETRY类型列的MySQL表。
当我使用mysqldump备份表时,它将我的几何列输出为带引号的字符串,包含一些转义字符,如\ 0,还有一些字符看起来像上面的ASCII范围内的原始二进制字节。
当我尝试将转储还原到另一个数据库时,它失败并显示错误:
“无法从您发送到Geometry字段的数据中获取GEOMETRY对象”。
我尝试将--hex-blob添加到我的命令行,但这不会改变输出或解决问题。
我确定有人没有在MySQL中创建数据类型而忘记包含一种备份方式。我错过了什么?
感谢。
答案 0 :(得分:3)
在我的情况下,此错误专门出现在非空几何列中的空几何值。
就我而言,空几何是未知几何的合法情况,所以我通过将列更改为允许空值,然后运行UPDATE ... SET geom = NULL WHERE IsEmpty(geom);
在此之后,我能够重新运行mysqldump
并成功将生成的sql导入到单独的数据库中。
(老实说,我不确定空几何值是如何到达那里的 - 我甚至不知道创建空几何值的语法)
答案 1 :(得分:2)
我可以确认在MySQL Workbench中使用导出/导入数据功能时不会发生此问题。 http://www.mysql.com/products/workbench/
答案 2 :(得分:1)
弗兰克,这似乎是mysqldump的一个长期(并且仍然是开放的)错误。请参阅http://bugs.mysql.com/bug.php?id=43544。
作为一种解决方法,您可以使用ogr2ogr工具将数据导出到shapefile,然后将其导回到数据库中。见http://www.bostongis.com/PrinterFriendly.aspx?content_name=ogr_cheatsheet
答案 3 :(得分:0)
我曾经遇到过这个问题,但是设法使用gzip进行了传递。请检查我的示例命令: 导出:
(defrule temperature
(av (attribute it-is-cold-inside)
(value TRUE))
=>
(assert (av (attribute it-is-cold-outside)
(value TRUE))
(dav (attribute window-is-open)
(value MAYBE)
(link temperature))
(dav (attribute door-is-open)
(value MAYBE)
(link temperature))))
(defrule one-remaining-dav
?dav <- (dav (attribute ?a)
(value ?v)
(link ?l))
(not (and (dav (attribute ?a2)
(value ?v2)
(link ?l))
(test (or (neq ?a ?a2)
(neq ?v ?v2)))))
=>
(retract ?dav)
(assert (av (attribute ?a)
(value TRUE))))
导入:
mysqldump -u root -p db_name | gzip > dump.sql.gz