使用load data local infile将几何数据导入mysql

bqucvtff  于 2021-06-15  发布在  Mysql
关注(0)|答案(0)|浏览(324)

我正在尝试使用 LOAD DATA LOCAL INFILE 语法。这通常是一个相当简单的任务,但在这种情况下,数据包括一个几何字段,这是绊倒了我。
当我尝试运行导入时,会出现如下错误:
sqlstate[hy000]:常规错误:4079操作“st\u geometryfromwkb”的非法参数数据类型longblob
我的csv文件中的记录如下所示:

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

所以我有一个位置名,lat/long坐标和一个二进制wkb格式的几何字段(上面的示例是一个简单的几何体,可以转换为 POINT(1,1) ; 真实数据具有复杂的多边形,但内容不相关;这个问题和这个简单的例子是一样的)。
我的table是这样的:

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... 十六进制值的符号;似乎什么都没用。
谁能帮我一下吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题