如何修复错误:#1416 – Cannot get geometry object from data you send to the GEOMETRY field

2021年11月29日19:53:30 发表评论 4,130 次浏览

了解导致 MySQL 错误 1416 的原因以及Cannot get geometry object from data解决办法。

如何修复错误:#1416 - Cannot get geometry object from data you send to the GEOMETRY field

我开始在 MySQL 中探索我从未在实际项目中使用过的新数据类型。由于MySQL 支持 Spatial 数据类型,因此将位置坐标存储到数据库表的 Point 类型列中似乎非常方便。在使用 PHPMyAdmin 插入表单(我想测试它的外观)插入新行这样简单的操作之后,可以使用如下所示的表单插入 Point 类型列的点:

如何修复错误:#1416 - Cannot get geometry object from data you send to the GEOMETRY field
Cannot get geometry object from data解决办法

填写表单并尝试插入记录后,以下生成的查询会出现此错误:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', '\'POINT(40.71727401 -74.00898606)\',0')

此查询将抛出上述错误:1416 - Cannot get geometry object from data you send to the GEOMETRY field。发生这种情况是因为查询无效。为防止出现此异常,你需要修复查询以匹配 MySQL 或 MariaDB 的当前版本,那么如何修复错误Cannot get geometry object from data

Cannot get geometry object from data解决办法:更正查询语法

空间列中的数据需要存储为空间数据。这些值应以内部几何格式存储,但你可以将它们从 Well-Known Text (WKT) 或 Well-Known Binary (WKB) 格式转换为该格式。

在较新版本的 MySQL 中,使用 Point 插入查询将起作用:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', POINT(40.71727401 -74.00898606))

由于 Point(X,Y) 函数基本上是一个精确数字的构造函数,不需要先转换为文本,因此速度更快。它还保证返回一个点或失败。

但是,对于旧版本的 MySQL 和 MariaDB,你将被迫使用速度较慢的 Well-Known text (WKT) 构造函数。在旧版本中,可以在没有前缀的情况下找到这些函数,因此只要它可用,请务必使用带有前缀的版本。 ST_  ST_ 

如何修复修复错误Cannot get geometry object from data?以下示例演示了如何通过将 WKT 值转换为其内部几何格式(如果ST_GeomFromText不可用,请GeomFromText改用)来将相同的数据几何值插入表中:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', ST_GeomFromText('POINT(40.71727401 -74.00898606)', 0));

即使你不使用 SRID(空间参考系统 ID),你也可以在没有此值的情况下插入点:

INSERT INTO `tableName`
    (`id`, `name`, `coordinates`) 
        VALUES 
    (NULL, 'My First Record', ST_GeomFromText('POINT(40.71727401 -74.00898606)'))

快乐编码❤️!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: