我一直在从 Mysql 升级网站5.6
to 5.7
。当从以下位置恢复备份时mysqldump
,在Mysql 5.1-5.6下工作了10年(不变),在MySQL下不再工作5.7
.
具体来说,第一行几何数据恢复失败:
ERROR 1416 (22003) at line 1580 Cannot get geometry object from data you send to the GEOMETRY field
所以这是有效的几何图形,但不再是了。
尝试的补救措施:
- 将 mysqldump 切换到
--hex-blob
- 尝试使用
astext( <some geometry> )
导入前
- 从备份中加载各种几何行的疲倦的手,全部失败
看起来像MySQL 5.7
在几何类型上比MySQL 5.6
。因此,数据表明是有效的现在是5.65.7 中无效.
这是修复MySQL 错误 #76337 https://bugs.mysql.com/bug.php?id=76337,发布中MySQL 5.7.8 https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html#mysqld-5-7-8-spatial-support.
在这种情况下,一个LINESTRING
被存储在类型的列中POINT
。这种方法持续了近十年,但之后就不再有效了。更改要键入的列LINESTRING
修复了上述加载错误。
-- The Fix - run on MySQL 5.6 database before Upgrade/Export
ALTER TABLE routes MODIFY COLUMN route_path LINESTRING;
其他故障模式
这个错误也出现在几何列上,它们能够保留 NULL 几何图形(但不是正式的 NULL)。 MySQLIS NULL
会说不为空,但是asText( myGeo )
回NULL
under MySQL 5.7。将这些导出到 MySQL 5.6 中返回的字符串''
, 空字符串。就这样''
5.6 的几何输出是 5.7 的无效输入。
解决办法是取消这些。
-- Convert NULL geometries to actual NULL's
UPDATE myTable SET myGeo = NULL WHERE asText(myGeo) IS NULL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)