Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL批量插入几何体字段_Mysql_Geometry_Bulkinsert - Fatal编程技术网

MySQL批量插入几何体字段

MySQL批量插入几何体字段,mysql,geometry,bulkinsert,Mysql,Geometry,Bulkinsert,我有一个mysql数据库,我正试图从文本文件中填充它。我的文件内容如下(仅作为一些示例,有数千行) 在我的模式中,第一个字段是整数,第二个是几何体 我尝试加载数据 LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE `testDb`.`testTable` FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n' 我得到了错误 Error Code 1416 Cannot get geometry object

我有一个mysql数据库,我正试图从文本文件中填充它。我的文件内容如下(仅作为一些示例,有数千行)

在我的模式中,第一个字段是整数,第二个是几何体

我尝试加载数据

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE `testDb`.`testTable` FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n'
我得到了错误

Error Code 1416 Cannot get geometry object from data you send to the GEOMETRY field
如果我尝试单独插入,如:

INSERT INTO TABLE testTable(id,region) VALUES (1,GeomFromText('Polygon(0 0, 1 1, 2 2, 0 0)'))
它工作没有问题。但是,对于大量插入来说,这是非常低效的。有人知道为什么批量加载会抛出该错误吗

谢谢,
Jeff

批量插入不计算sql语句,它只是将值放入数据库中。这意味着GeomFromText(“多边形(0,1,1,2,2,0)”仅被解释为字符串值,它不是几何体对象,因此不能插入到几何体列中

您需要设置在每行插入时调用的函数,如下所示,其中强调文本obj_idobj_geo是列名:

LOAD DATA INFILE 'c:\myFile.txt'
INTO TABLE `tbl_myTable`
(@var1, @var2)
SET
obj_id = @var1,
obj_geo = GeomFromText(@var2);

为什么不用bash或php编写一个非常简单的脚本,或者在浏览文件时执行所有插入操作。我想,即使是AWK也可以做得很好。它有几十万个插入,这在数据库方面真的很慢。@Scott。实际上还有一些其他的减速。现在,循环插入只需要大约4分钟,因此这对我们的案例有效。谢谢。太本地化了——您正在尝试在load而不是WKT中计算SQL/MM。可能会让搜索引擎和很多人感到困惑。我尝试从一个单独的程序中创建csv,该程序包含多个多边形,当我导入它时,它会生成空值。你能举一个简单的csv行的例子吗?你可能需要为MySQL和MULTIPOLYGONS使用合适的构造函数。查看该对象的MySQLdocs()。您需要将上述示例改编为该类型,并确保它存储在几何体列中。
LOAD DATA INFILE 'c:\myFile.txt'
INTO TABLE `tbl_myTable`
(@var1, @var2)
SET
obj_id = @var1,
obj_geo = GeomFromText(@var2);