【问题标题】:MySQL INSERT/UPDATE on POINT column点列上的 MySQL INSERT/UPDATE
【发布时间】: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

【问题讨论】:

    标签: mysql sql geospatial spatial mysql-error-1416


    【解决方案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 的两个参数。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2020-09-03
    • 1970-01-01
    • 2015-01-20
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多