Импорт данных геометрии в MySQL с помощью LOAD DATA LOCAL INFILE

Я пытаюсь импортировать данные CSV в MySQL, используя LOAD DATA LOCAL INFILE синтаксис. Обычно это довольно простая задача, но в этом случае данные содержат геометрическое поле, которое сбивает меня с толку.

Когда я пытаюсь запустить импорт, я получаю такие ошибки:

SQLSTATE [HY000]: общая ошибка: 4079 Недопустимый тип данных параметра longblob для операции 'st_geometryfromwkb'

Записи в моем CSV-файле выглядят так:

'Somewhere', -0.574823, 51.150771, '0x0101000000000000000000F03F000000000000F0BF'

Итак, у меня есть имя местоположения, координаты широты и долготы и поле геометрии в двоичном формате WKB. (пример выше представляет собой простую геометрию, которая переводится в POINT(1,1); реальные данные имеют сложные многоугольники, но контент не имеет значения; проблема такая же с этим простым примером).

Моя таблица выглядит так:

CREATE TABLE IF NOT EXISTS `mapping` (
  `id` int AUTO_INCREMENT PRIMARY KEY,
  `location` varchar(80) DEFAULT NULL,
  `longitude` double DEFAULT NULL,
  `latitude` double DEFAULT NULL,
  `geom` geometry NOT NULL,
  INDEX mapping_by_location (location),
  SPATIAL KEY `mapping_by_geom` (`geom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

И мой запрос на импорт выглядит так:

LOAD DATA LOCAL INFILE '{$file}'
REPLACE INTO TABLE `mapping`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(@col1, @col2, @col3, @col4)
SET
`location` = @col1,
`latitude` = @col2,
`longitude` = @col3,
`geom` = GeomFromWKB(@col4);

Как уже говорилось, с этим запросом импорта я получаю Illegal parameter data type ошибка показана в верхней части этого вопроса.

Тем не менее, запрос работает, если я заменяю последнюю строку жестко закодированной геометрией, например:

`geom` = GeomFromWKB(0x0101000000000000000000F03F000000000000F0BF);

Очевидно, что это не очень хорошо, так как мне нужно поле для загрузки из CVS, а не жестко закодированное значение в запросе, но оно работает, в то время как загрузка того же значения из CSV в @col4 не.

Я попробовал несколько вариантов этого запроса - с вызовом и без GeomFromWKB(), с обоими X'...' а также 0x... обозначения для шестнадцатеричного значения; кажется, ничего не работает.

Может ли кто-нибудь помочь мне, пожалуйста?

0 ответов

Другие вопросы по тегам