将MySQL从5.6版更新到5.7版后出现错误

时间:2020-05-31 11:08:24

标签: php mysql codeigniter gis mysql-5.7

到目前为止,我一直在尝试解决将MySQL数据库版本从5.6升级到5.7后出现的问题。

该查询(如下所述)正在使用MySQL版本5.6的旧服务器上运行,但是当我们从旧服务器迁移到新服务器上并将MySQL版本从5.6更新到5.7时,从应用程序执行时将不再起作用。我遇到错误

错误号:3037为函数st_geometryfromtext提供了无效的GIS数据

如果我尝试从phpmyadmin执行而不是从代码执行,则相同的查询有效。

SELECT tbl_person.iPersonID,
    (SELECT ST_Contains(tbl_zone.gZoneNodes , ST_GeomFromText( CONCAT('POINT(',tbl_person.vLatitude,' ',tbl_person.vLongitude,')'))) as inZone FROM  tbl_zone  where tbl_zone.iZoneID=1 tbl_zone.eIsDelete=0 AND tbl_zone.eStatus='Active') as inZone
FROM tbl_person
HAVING
    tbl_person.eStatus = 'Active' AND
    tbl_person.eIsDelete = 0 AND
    inZone = 1

gZoneNodesgeometry中的tbl_zone字段,其数据为

(ST_AsText(gZoneNodes)) => POLYGON((32.3066115870265 0.0009878270766314338,32.307868862223124 0.0009880653969851075,32.304690380230106 0.0009881054438665162,32.306556639807646 0.0009878539867606698,32.312507567110586 0.0009878801802080809,32.3066115870265 0.0009878270766314338))

vLatitudevLongitudevarchar表中的tbl_person字段。

该查询用于获取特定区域中活动的所有人员。该应用程序是用Codeigniter编写的,并且如前所述在升级之前可以正常工作。

ST_GeomFromText( CONCAT('POINT(',tbl_person.vLatitude,'
',tbl_person.vLongitude,')'))

这部分似乎是问题所在,当执行查询而不是从表的latlong字段中获取值时,它们在mysql 5.7中被视为字符串。如果我将其更改为硬编码的纬度和经度以检查单人位置,则查询工作正常。

我尝试了不同的组合以使其正常工作,但是没有运气。而且无法找到一个示例,该示例试图引用空间几何函数中另一个表的字段。

有什么办法可以使它正常工作吗?

0 个答案:

没有答案