Импорт данных геометрии в 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...
обозначения для шестнадцатеричного значения; кажется, ничего не работает.
Может ли кто-нибудь помочь мне, пожалуйста?