数据库存储经纬度(lng、lat)的适配数据类型及长度需求咨询
嘿,这个问题我之前做地理相关项目的时候也纠结过,刚好可以分享下实用的经验!
一、选什么数据类型最合适?
这里分两种场景推荐,看你的需求:
- 优先用数据库专用地理类型:很多主流数据库都提供了原生的空间数据类型,比如MySQL的
POINT、PostgreSQL的GEOGRAPHY/POINT、SQL Server的GEOGRAPHY。这类类型不仅能精准存储经纬度,还支持内置的空间查询功能(比如计算两点距离、查找某个范围内的坐标),非常适合需要做地理相关操作的场景。 - 用定点数类型(DECIMAL):如果不需要复杂的空间操作,只是单纯存储坐标,
DECIMAL是比FLOAT/DOUBLE更好的选择——浮点类型会有精度丢失的问题,而DECIMAL是精确的定点数。推荐用DECIMAL(10,8):总位数10位,其中小数部分占8位,这个精度足够覆盖绝大多数日常场景(能精确到厘米级,约0.01米)。如果是高精度需求(比如测绘级),可以升级到DECIMAL(12,10),不过一般项目用前者就够了。
二、经纬度的取值范围与存储长度
先明确经纬度本身的物理范围:
- 经度(lng):取值范围是 -180° 到 180°,包含正负值
- 纬度(lat):取值范围是 -90° 到 90°,包含正负值
对应到存储长度(以常用的DECIMAL(10,8)为例):
- 经度的最长存储格式比如
-180.00000000,算上负号、小数点一共是11个字符长度 - 纬度的最长存储格式比如
-90.00000000,一共是10个字符长度
如果用数据库的专用地理类型,就不用纠结字符长度了——这类类型会自动按最优方式存储,不用你手动指定长度。
内容的提问来源于stack exchange,提问作者Sukhpal Singh




