You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL设置SRID为4326时坐标互换,这是Bug吗?

MySQL中ST_SRID()设置SRID为4326时坐标互换的问题分析

MySQL提供的ST_SRID()函数,设计目的是仅修改几何对象的SRID元数据,不转换坐标值。在多数场景下,该函数确实符合预期:

mysql> select st_astext(point(23,56));
+-------------------------+
| st_astext(point(23,56)) |
+-------------------------+
| POINT(23 56)            |
+-------------------------+
1 row in set (0,00 sec)

mysql> select st_astext(st_srid(point(23,56),3059));
+---------------------------------------+
| st_astext(st_srid(point(23,56),3059)) |
+---------------------------------------+
| POINT(23 56)                          |
+---------------------------------------+
1 row in set (0,00 sec)

但当将SRID设置为4326时,会出现坐标互换的异常情况:

mysql> select st_astext(st_srid(point(23,56),4326));
+---------------------------------------+
| st_astext(st_srid(point(23,56),4326)) |
+---------------------------------------+
| POINT(56 23)                          |
+---------------------------------------+
1 row in set (0,00 sec)

临时解决方案

通过序列化后再解析的方式设置SRID,不会触发坐标互换:

mysql> select st_astext(st_geomfromwkb(st_asbinary(point(23,56)),4326));
+-----------------------------------------------------------+
| st_astext(st_geomfromwkb(st_asbinary(point(23,56)),4326)) |
+-----------------------------------------------------------+
| POINT(23 56)                                              |
+-----------------------------------------------------------+
1 row in set (0,00 sec)

问题性质判断

这属于MySQL的Bug,理由如下:

  • ST_SRID()的设计语义明确为仅修改SRID元数据,不应改变坐标值
  • 对比PostGIS的ST_SetSRID()函数,设置SRID为4326时不会出现坐标互换,符合函数的预期逻辑
  • 序列化再解析的方式能得到正确结果,说明ST_SRID()针对4326的处理逻辑存在特殊错误,而非坐标存储或解析的通用问题

内容的提问来源于stack exchange,提问作者OPPO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:52:40