插入和查询MySQL点值返回ASCII

3
我是一名有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:

我遇到了一个比较奇怪的问题。我正在尝试插入MySQL点坐标并在PHP中返回,但是我得到的是ASCII码而不是坐标。

这是我的SQL语句:

CREATE TABLE `Grid` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `cntr_point` POINT DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;

INSERT INTO `Grid`(cntr_point) 
VALUES(POINTFROMTEXT('POINT(49.227239 17.564932)'));

在 PHP 中,我有这样的代码(对于其他字段有效):

$row['cntr_point']

但我得到了随机的ASCII字符输出,例如:

*H@v0b1@

当我期望看到我插入的坐标时,实际上我得到的是相同的结果,即使我跳过PHP使用像SQLFiddle这样的工具:

SQLFiddle


对于我来说,生成类似于00000000010100000018B0E42A169D4840C07630629F903140的内容是针对cntr_point的。 - Professor Abronsius
谢谢您的回复。是的,PHP返回的值与SQLfiddle略有不同,但两者都没有给我我输入的实际坐标。 - Jimmy
2个回答

4
你可以使用ST_AsText
SELECT id, ST_AsText(cntr_point) FROM Grid

输出:POINT(49.227239 17.564932)

或者您可以使用ST_XST_Y来获取坐标:

SELECT id, ST_X(cntr_point), ST_Y(cntr_point) FROM Grid;

Fiddle


谢谢您的帮助。由于我的MySQL版本支持aswkt,我将使用它,但仍然很有帮助。 - Jimmy

2

POINT 数据类型包含二进制数据。尝试使用 ST_AsWkt() 将其显示为文本。

SELECT id, ST_AsWkt(cntr_point) FROM Grid

在MySQL的OpenGIS扩展中,像您的POINT列这样的几何列以所谓的Well-Known Binary(WKB)格式存储。 ST_AsWkt()将WKB转换为Well-Known Text(WKT)。
您在INSERT中使用的常量'POINT(49.227239 17.564932)'是WKT的一个示例。您在加载表时使用的POINTFROMTEXT()函数进行了反向转换。
因此,如果您只想要经度/纬度数据,您需要从php程序中提取它们的WKT。或者,如果在您的应用程序中有意义,您可以使用GeoPHP直接处理WKB。

AsText()函数已被弃用,建议使用ST_AsWkt()函数。 - O. Jones
1
然而,那个特定的函数ST_AsWkt在MySQL 5.7之前似乎不可用?! - Professor Abronsius
谢谢您。看起来可以工作。可能是个愚蠢的问题,但我是否需要使用PHP来剥离周围的Point(),以便只返回坐标,还是有一种方法可以使SQL仅返回坐标? - Jimmy
肯定是在5.6版本中。 - O. Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接