Перенос таблицы MariaDB с геометрическими данными в MySql, некоторые данные не могут быть вставлены, потому что они не правильно сформированы, даже если это не проблема для MariaDB.
Этот запрос работает на MariaDB (10.2).
CREATE TABLE IF NOT EXISTS geo (
id INT AUTO_INCREMENT NOT NULL,
value GEOMETRY NOT NULL,
SPATIAL INDEX idx_value (value),
PRIMARY KEY(id)
) ENGINE = InnoDB;
INSERT INTO geo (value) SELECT ST_GeomFromText('LINESTRING(1 2)');
Не на MySql (5.7.20), где ошибка:
3037 - неверные ГИС-данные, предоставленные функции st_geometryfromtext.
В MySql есть три функции для идентификации таких геометрий: ST_IsSimple()
, ST_IsValid()
и ST_Validate()
, но они не работают с плохо отформатированными геометриями:
SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_IsValid(ST_GeomFromText('LINESTRING(1 2)'));
SELECT ST_AsText(ST_Validate(ST_GeomFromText('LINESTRING(1 1)')));
3055 -Строка байта Geometry должна иметь младший порядок.
Этот пример взят из https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html,, но он не работает.Так что это странно (документ не обновлялся для 5.7).Подробнее о действительности в mysql: https://dev.mysql.com/doc/refman/5.7/en/geometry-well-formedness-validity.html (mysql принимает любой синтаксически правильно сформированный ввод, но не геометрически неверный).
Подобные проблемы здесь:
Но ни один из них не отвечает на вопрос: как плохо идентифицироватьотформатированные геометрии на MySQL 5.7?