使用LOAD DATA LOCAL INFILE

时间:2018-12-19 09:00:12

标签: mysql geometry load-data-infile wkb

我正在尝试使用LOAD DATA LOCAL INFILE语法将CSV数据导入MySQL。通常这是一项相当简单的任务,但是在这种情况下,数据中包含一个使我绊倒的几何字段。

当我尝试运行导入时,出现如下错误:

  

SQLSTATE [HY000]:常规错误:4079操作'st_geometryfromwkb'的参数数据类型longblob非法

我的CSV文件中的记录如下:

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

所以我有一个位置名称,经/纬度坐标和二进制WKB格式的geometry字段。 (上面的示例是一个简单的几何图形,可以转换为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加载字段而不是查询中的硬编码值,但是它确实可以工作,而从@col4中的CSV加载相同的值没有。

我已经对该查询尝试了多种变体-使用和不使用GeomFromWKB()调用,十六进制值分别用X'...'0x...表示;似乎没有任何作用。

任何人都可以给我一些帮助吗?

0 个答案:

没有答案