MySQL POINT列显示乱码求助:存储坐标后出现奇怪字符
问题解答
- 这不是编码问题,也不是POINT类型不支持坐标,是HeidiSQL直接读取POINT的二进制存储格式导致的“乱码”。
原因说明
MySQL的空间类型(包括POINT)采用二进制格式存储地理数据,并非明文坐标字符串。你看到的奇怪字符就是二进制数据的直接转译,属于正常现象,数据本身没有损坏。
正确查看坐标的方法
用MySQL提供的空间函数将二进制数据转换为可读格式:
- 查看完整坐标文本:
SELECT ST_AsText(coordinates) FROM _coordinates_test;
执行后会返回标准格式的坐标:POINT(59.356125477261266 -2.8759361517393898) - 单独提取纬度/经度:
SELECT ST_X(coordinates) AS latitude, ST_Y(coordinates) AS longitude FROM _coordinates_test;
米级距离计算方案
要计算物理对象间的米级距离,使用MySQL 5.7及以上版本支持的ST_Distance_Sphere函数,该函数基于球面计算两点间的直线距离(单位:米):
SELECT ST_Distance_Sphere( POINT(59.356125, -2.875936), POINT(另一纬度, 另一经度) ) AS distance_meters;
注意传入POINT的参数顺序是纬度在前,经度在后,和你插入数据时的格式一致。
HeidiSQL客户端优化
如果想在HeidiSQL中直接查看可读坐标,可在查询时固定用ST_AsText转换字段,部分新版本HeidiSQL也支持在表结构设置中,将空间类型字段的显示方式改为“文本格式”。
内容的提问来源于stack exchange,提问作者RedZ
相关产品推荐
相关产品推荐

