Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile ripristinare l'errore MySQL 5.7 di backup della geometria

Sembra MySQL 5.7 è più severo nei tipi Geometry rispetto a MySQL 5.6 . Pertanto, dati che erano validi in 5.6 ora è non valido in 5.7 .

Questa è stata la soluzione a MySQL Bug #76337 , nella versione MySQL 5.7.8 .

In questo caso, un LINESTRING veniva memorizzato in una colonna di tipo POINT . Questo ha funzionato per quasi un decennio, ma non di più. Modifica della colonna per digitare LINESTRING corretto l'errore di caricamento sopra.

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

Altre modalità di errore

Questo bug si manifesta anche su colonne geometriche dove erano in grado di persistere le geometrie NULL (ma non essendo ufficialmente NULL). MySQL IS NULL direi non null, ma asText( myGeo ) restituito NULL in MySQL 5.7 . L'esportazione di questi in una stringa in MySQL 5.6 ha restituito '' , stringa vuota. Quindi il '' l'output della geometria da 5.6 era e input non valido per 5.7.

La soluzione era annullarli.

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