MySQL ST_GeomFromText设置澳大利亚点时经纬度混淆问题
问题原因与解决方案
错误根源
MySQL 8.0中,针对EPSG:4326(WGS84地理坐标系),ST_GeomFromText解析WKT格式的POINT时,坐标顺序要求是纬度在前,经度在后(即Y轴在前,X轴在后)。你的语句中把经度(Lng=151.3346)放在了第一个位置,被MySQL识别为纬度,而纬度的合法范围是[-90.000000, 90.000000],151明显超出范围,因此触发报错。
之前多数记录未报错,是因为那些记录的经度值恰好落在[-90,90]区间内,MySQL没有检测到异常,但实际上生成的POINT坐标是错误的(经纬度顺序颠倒)。
两种修复方案
方案1:调整WKT中的经纬度顺序
将POINT(Lng Lat)改为POINT(Lat Lng),确保纬度作为第一个参数传入:
UPDATE points SET point_4326 = ST_GeomFromText(CONCAT('POINT(', Lat, ' ', Lng, ')'), 4326) WHERE point_id = 4601
方案2:使用ST_Point函数(更推荐)
ST_Point函数支持直接传入经度(X)、纬度(Y)和SRID,无需手动拼接WKT,从根源避免顺序混淆:
UPDATE points SET point_4326 = ST_Point(Lng, Lat, 4326) WHERE point_id = 4601
验证
执行修复后的语句后,可通过以下语句查看生成的POINT文本,确认坐标顺序正确:
SELECT ST_AsText(point_4326) FROM points WHERE point_id = 4601;
预期输出应为POINT(-33.484806894966 151.33459992068)(或保留对应精度的数值)。
内容的提问来源于stack exchange,提问作者StripyTiger
相关产品推荐
相关产品推荐

