sql >> Database >  >> RDS >> Mysql

Kan Geometry Backup MySQL 5.7-fout niet herstellen

Het ziet eruit als MySQL 5.7 is strenger in geometrietypes dan MySQL 5.6 . Als zodanig zijn gegevens die geldig waren in 5.6 is nu ongeldig in 5.7 .

Dit was de oplossing voor MySQL-bug #76337 , in release MySQL 5.7.8 .

In dit geval een LINESTRING werd opgeslagen in een kolom van het type POINT . Dit werkte bijna een decennium, maar niet meer. De kolom wijzigen om LINESTRING te typen de bovenstaande laadfout verholpen.

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

Andere storingsmodi

Deze bug manifesteerde zich ook op geometrische kolommen waar ze NULL-geometrieën konden behouden (maar niet officieel NULL waren). MySQL IS NULL zou zeggen niet null, maar asText( myGeo ) NULL geretourneerd onder MySQL 5.7 . Het exporteren van deze naar een string in MySQL 5.6 gaf '' , lege tekenreeks. Dus de '' geometrie-uitvoer van 5.6 was en ongeldige invoer voor 5.7.

De oplossing was om deze op nul te zetten.

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



  1. Groeperen op twee velden gebruiken en tellen in SQL

  2. Transactie afhandelen in multithreaded omgeving

  3. Provider genaamd pijpen provider fout 40 kan geen verbinding maken met SQL Server fout 2

  4. Hoe kom ik erachter of een datum in een interval past in PHP of MySQL?