MySQL无法查询到已存在的Lat&Lng记录的原因排查
MySQL无法查询到已存在经纬度记录的常见原因
针对你执行的查询语句:
select id from addresses where lat = "42.5632172" and lng = "27.5266380"
返回空结果但实际记录存在的情况,常见原因如下:
字段类型与查询值类型不匹配
如果lat和lng是数值类型(比如DECIMAL、FLOAT或DOUBLE),用字符串格式的数值进行等值匹配时,MySQL会进行隐式类型转换,可能导致精度丢失或匹配失败。建议直接用数值格式查询:select id from addresses where lat = 42.5632172 and lng = 27.5266380浮点/小数类型的精度问题
若lat、lng是FLOAT或DOUBLE类型,这类浮点类型本身存在精度限制,存储的数值可能和显示值有细微差异(比如实际存储42.563217200000003),直接用=精确匹配会失败。可以改用范围查询或ROUND函数控制精度:-- 范围查询(根据实际精度调整误差范围) select id from addresses where lat between 42.5632171 and 42.5632173 and lng between 27.5266379 and 27.5266381; -- 或使用ROUND函数 select id from addresses where ROUND(lat,7) = 42.5632172 and ROUND(lng,7) = 27.5266380;字段存在隐藏空白字符
如果lat和lng是字符串类型(比如VARCHAR),存储的数值可能带有前后空格或不可见字符,直接匹配纯数值字符串会失败。尝试用TRIM函数去除空格后查询:select id from addresses where TRIM(lat) = "42.5632172" and TRIM(lng) = "27.5266380";显示值与实际存储值不一致
数据库工具可能会对数值格式化显示(比如截断末尾零或四舍五入),但实际存储的数值更长。可以先通过记录ID查询原始存储值确认:select id, lat, lng from addresses where id = [对应记录的ID];查看返回的
lat和lng是否和你查询的数值完全一致。
内容的提问来源于stack exchange,提问作者Europeuser
相关产品推荐
相关产品推荐

