Maxmind GeoLite2 City数据库返回不存在的geoname_id原因咨询
这是预期行为,并非Bug
你遇到的情况其实是MaxMind GeoLite2数据库CSV文件的拆分存储逻辑导致的,不属于Bug,下面给你详细解释:
核心原因:CSV文件的分层存储设计
GeoLite2的二进制数据库(.mmdb)会整合从大洲、国家、各级行政区划到城市的全层级地理数据,所以查询IP时能直接返回所有关联的地理条目;但CSV格式的数据库是拆分存储的:
GeoLite2-City-Locations-*.csv:仅存储城市级及与城市直接绑定的基础地理信息,不会包含更高层级的大区/一级行政区划数据GeoLite2-City-Subdivisions-*.csv:专门存储各级行政区划(比如国家下的一级大区、二级省份等)的geoname_id与名称的映射关系
验证方法
你可以在下载的CSV压缩包中找到对应语言的Subdivisions文件,执行以下命令:
cat GeoLite2-City-Subdivisions-en.csv | grep 11071621
就能找到对应的Normandy(诺曼底)条目,这正是你在二进制查询结果中看到的一级行政区划。
额外说明
MaxMind的文档中虽然没有单独强调这一点,但CSV文件的命名和拆分逻辑本身就隐含了这种分层设计——如果你需要完整的地理数据关联,需要同时参考Locations和Subdivisions两类CSV文件,而不是只依赖Locations文件。
内容的提问来源于stack exchange,提问作者alexb
相关产品推荐
相关产品推荐

