Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible de restaurer l'erreur MySQL 5.7 de sauvegarde de la géométrie

Il ressemble à MySQL 5.7 est plus strict dans les types de géométrie que MySQL 5.6 . En tant que telles, les données qui étaient valides dans 5.6 est maintenant invalide dans 5.7 .

C'était le correctif du Bogue MySQL #76337 , dans la version MySQL 5.7.8 .

Dans ce cas, un LINESTRING était stocké dans une colonne de type POINT . Cela a fonctionné pendant près d'une décennie, mais pas plus. Changer la colonne pour taper LINESTRING correction de l'erreur de chargement ci-dessus.

-- The Fix - run on MySQL 5.6 database before Upgrade/Export
ALTER TABLE routes MODIFY COLUMN route_path LINESTRING;

Autres modes de défaillance

Ce bogue se manifeste également sur les colonnes géométriques où elles ont pu conserver des géométries NULL (mais n'étant pas officiellement NULL). MySQL IS NULL dirait non null, mais asText( myGeo ) a renvoyé NULL sous MySQL 5.7 . L'exportation de ceux-ci vers une chaîne dans MySQL 5.6 a renvoyé '' , chaîne vide. Ainsi le '' la sortie de géométrie de 5.6 était et une entrée invalide pour 5.7.

Le correctif consistait à les annuler.

-- Convert NULL geometries to actual NULL's
UPDATE myTable SET myGeo = NULL WHERE asText(myGeo) IS NULL;