点列上的 MySQL INSERT/UPDATE

Posted

技术标签:

【中文标题】点列上的 MySQL INSERT/UPDATE【英文标题】:MySQL INSERT/UPDATE on POINT column 【发布时间】:2011-03-13 22:56:51 【问题描述】:

我正在尝试用我所在国家/地区的地理位置填充我的数据库。我的一张表有 4 个字段:ID[PK]、纬度。经度安德geoPoint

EDIT `SCDBs`.`Punto_Geografico`;

SET @lat = 18.469692;

SET @lon = -63.93212;

SET @g = 'POINT(@lat @lon)';

UPDATE Punto_Geografico SET latitude = @lat, longitude =@lon, geoPoint =@g WHERE idpunto_geografico = 0;

我收到以下错误: 错误代码:1416 无法从您发送到 GEOMETRY 字段的数据中获取几何对象

我很确定“geoPoint”字段是一个带有空间索引的 POINT 字段。我有什么遗漏吗?14

【问题讨论】:

【参考方案1】:

你需要使用这个语法:

UPDATE ... SET latitude=18, longitute=-63, geoPoint=GeomFromText('POINT(18 -63)') WHERE ...

【讨论】:

这仅在 mysql dba.stackexchange.com/a/33454/2725 - 接受的答案是正确的。 它也有效:UPDATE ... SET latitude=18, longitute=-63, geoPoint=POINT(18, -63) WHERE ...。用逗号分隔 POINT 中的参数【参考方案2】:

尝试在不将您的值分配给服务器值的情况下执行此操作。特别是如果它们包含函数调用。 MySQL 将变量的内容视为纯文本,不会看到其中有函数调用。

UPDATE ... SET latitude=18, longitute=-63, geoPoint=POINT(18 -63) WHERE ...

【讨论】:

出于某种原因:UPDATE Punto_Geografico SET latitude = 18.469692, longitude = -63.93212, geoPoint =PoinT(18.469692, -63.93212) WHERE idpunto_geografico = 0;它表示更新成功,但我在 geoPoint 列中看不到任何值。我还在 POINT 语句中做了一个“,”,这是唯一可行的方法。 显然在 MySQL 中我看不到几何列内的内容,但是如果我使用 SELECT AsText(*) ... 我可以看到点信息。 这不行,FattyPotatoes 的回答是正确的。 POINT() 需要表示为字符串并用 GeomFromText() 函数包装。 自 MySQL 5.1.35 以来这是正确的,请参阅dba.stackexchange.com/a/33454/2725 我测试了以下内容,它对我有用:UPDATE ... SET latitude=18, longitute=-63, geoPoint=POINT(18, -63) WHERE ...。我用逗号分隔 POINT 的两个参数。

以上是关于点列上的 MySQL INSERT/UPDATE的主要内容,如果未能解决你的问题,请参考以下文章

TEXT 列上的 MySQL 索引无效

时间戳列上的 MySQL 索引不用于大日期范围

主索引列上的 MySQL 表外键索引

设置点列的默认值

MySQL计算两列上的唯一值并为每列加入这些计数

在 MySQL 中,如何找到分组在特定列上的 N 个最大值的总和? [复制]