我一直在将网站从 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
Run Code Online (Sandbox Code Playgroud)
所以,这是有效的几何图形,但不再是了。
尝试的补救措施:
--hex-blobastext( <some geometry> )导入前尝试使用看起来MySQL 5.7几何类型比MySQL 5.6. 因此,在 5.6 中有效的数据现在在 5.7 中无效。
这是MySQL 5.7.8版本中对MySQL Bug #76337 的修复。
在本例中, aLINESTRING存储在类型为 的列中POINT。这种方法持续了近十年,但之后就不再有效了。将列更改为类型LINESTRING修复了上述加载错误。
-- The Fix - run on MySQL 5.6 database before Upgrade/Export
ALTER TABLE routes MODIFY COLUMN route_path LINESTRING;
Run Code Online (Sandbox Code Playgroud)
其他故障模式
这个错误也出现在几何列上,它们能够保留 NULL 几何图形(但不是正式的 NULL)。MySQLIS NULL会说 not null,但在MySQL 5.7下asText( myGeo )返回。将这些导出到 MySQL 5.6 中的字符串返回空字符串。因此,5.6 的几何输出对于 5.7 来说是无效的输入。NULL''''
解决办法是取消这些。
-- Convert NULL geometries to actual NULL's
UPDATE myTable SET myGeo = NULL WHERE asText(myGeo) IS NULL;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2026 次 |
| 最近记录: |