我一直在将网站从Mysql 5.6
升级到5.7
。从Mysql 5.1-5.6下已经工作10年(未更改)的mysqldump
恢复备份时,它不再适用于MySQL 5.7
。
具体来说,第一行几何数据无法恢复:
ERROR 1416 (22003) at line 1580 Cannot get geometry object from data you send to the GEOMETRY field
所以,这个是有效几何,但不再是。
尝试补救措施:
--hex-blob
astext( <some geometry> )
答案 0 :(得分:2)
看起来MySQL 5.7
几何类型比MySQL 5.6
更严格。因此,5.6中有效的数据现在在5.7 中无效。
这是MySQL Bug #76337版本MySQL 5.7.8的修正。
在这种情况下,LINESTRING
存储在POINT
类型的列中。这已经工作了将近十年,但已不复存在。将列更改为LINESTRING
类型可修复上述加载错误。
-- The Fix - run on MySQL 5.6 database before Upgrade/Export
ALTER TABLE routes MODIFY COLUMN route_path LINESTRING;
其他失败模式
这个错误也出现在几何列上,它们能够持久化NULL几何(但不是正式的NULL)。 MySQL IS NULL
会说不为空,但asText( myGeo )
在 MySQL 5.7 下返回NULL
。将这些导出到MySQL 5.6中的字符串返回''
,空字符串。因此,5.6的''
几何输出是5.7的无效输入。
修复是将这些归零。
-- Convert NULL geometries to actual NULL's
UPDATE myTable SET myGeo = NULL WHERE asText(myGeo) IS NULL;