Skip to content

本页同步自仓库数据字典(单一真相源)

源文件:docs/SQLITE_DATA_README.md。GitHub Release data-snapshot-2023 内的同名字典以此为准同步。

中国行政区划数据库说明文档

概述

本项目包含两套行政区划数据,均为历年数据快照:

数据集数据来源文件命名年份范围
GB2260国家统计局(GB/T 2260 国标)GB2260.{year}.sqlite1980-2023
NBS国家统计局统计数据库NBS.{year}.sqlite2009-2023

Schema 对比

GB2260.*.sqlite (3级结构)

province (省级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110000"
└── name: VARCHAR(255)              -- 名称,如 "北京市"

city (市级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110100"
├── name: VARCHAR(255)              -- 名称,如 "市辖区"
└── provinceCode: VARCHAR(255)      -- 关联省级代码,外键

county (县级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110101"
├── name: VARCHAR(255)              -- 名称,如 "东城区"
├── cityCode: VARCHAR(255)          -- 关联市级代码,外键
└── provinceCode: VARCHAR(255)      -- 关联省级代码,外键

NBS.*.sqlite (5级结构)

province (省级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110000"
└── name: VARCHAR(255)              -- 名称,如 "北京市"

city (市级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110100"
├── name: VARCHAR(255)              -- 名称,如 "市辖区"
└── provinceCode: VARCHAR(255)      -- 关联省级代码,外键

area (县级/区级)
├── code: VARCHAR(255) PRIMARY KEY  -- 6位代码,如 "110101"
├── name: VARCHAR(255)              -- 名称,如 "东城区"
├── cityCode: VARCHAR(255)          -- 关联市级代码,外键
└── provinceCode: VARCHAR(255)      -- 关联省级代码,外键

street (乡级/镇级/街道)
├── code: VARCHAR(255) PRIMARY KEY  -- 9位代码,如 "110101001"
├── name: VARCHAR(255)              -- 名称,如 "东华门街道办事处"
├── areaCode: VARCHAR(255)          -- 关联县级代码,外键
├── provinceCode: VARCHAR(255)      -- 关联省级代码,外键
└── cityCode: VARCHAR(255)          -- 关联市级代码,外键

village (村级)
├── code: VARCHAR(255) PRIMARY KEY  -- 12位代码,如 "110101001001"
├── name: VARCHAR(255)              -- 名称,如 "多福巷社区居委会"
├── streetCode: VARCHAR(255)        -- 关联乡级代码,外键
├── provinceCode: VARCHAR(255)      -- 关联省级代码,外键
├── cityCode: VARCHAR(255)          -- 关联市级代码,外键
└── areaCode: VARCHAR(255)          -- 关联县级代码,外键

数据量统计 (2023年)

层级GB2260NBS说明
3431NBS 不含台港澳
333342NBS 包含更多市辖区
2,8422,978NBS 包含更多县级单位
乡/镇-41,352仅 NBS 有
村/社区-620,573仅 NBS 有

各年份数据量

GB2260

年份
1980293162,761
1981293162,772
1982293192,793
1983293212,775
1984293232,813
1985293272,825
1986293242,831
1987293262,826
1988303342,830
1989303362,829
1990303362,833
1991303382,833
1992303392,833
1993303352,835
1994303332,845
1995303342,849
1996303352,858
1997313322,862
1998313312,863
1999313312,858
2000313332,861
2001313322,861
2002313322,860
2003313332,861
2004313332,862
2005313332,862
2006313332,860
2007313332,859
2008313332,859
2009313332,858
2010313332,856
2011313322,853
2012313332,852
2013343332,853
2014343332,854
2015343342,850
2016343342,851
2017343342,851
2018343332,851
2019343332,846
2020343332,842
2021343332,841
2022343332,841
2023343332,842

注意:1997-2012 年省级保持 31 个(不含台港澳),2013 年开始收录台湾省(710000)、香港特别行政区(810000)、澳门特别行政区(820000),增至 34 个。

NBS

年份
2009313453,20344,850699,220
2010313453,19944,783696,066
2011313443,16844,166694,486
2012313453,19044,614694,670
2013313453,19544,737694,697
2014313463,19840,893670,479
2015313463,13839,959667,519
2016313442,85642,951667,910
2017313433,00943,524673,804
2018313433,00443,564666,261
2019313422,99543,105658,001
2020313422,99441,614633,981
2021313422,99041,356618,134
2022313422,98441,351619,503
2023313422,97841,352620,573

注意:NBS 数据省级始终为 31 个,且各层级(含 village)均不收录台港澳——实测 village 表 71/81/82 前缀记录数为 0。(GB2260 自 2013 年起收录台湾/香港/澳门的省级代码 710000/810000/820000,那是另一套数据源,勿与 NBS 混淆。)

2015 行为重建值:原始 NBS.2015.sqlite 曾损坏为 0 字节,现由幸存的 data/stats.gov.cn/2015.json 重建(scripts/rebuild-nbs-sqlite.ts)。幸存 JSON 口径略小于原始 sqlite(原记录为 县3,218 / 乡41,127 / 村673,804,已随原文件丢失,此处保留备忘)。其余年份均由对应 sqlite 直接统计。


使用示例

Node.js

javascript
const Database = require('better-sqlite3');

// 连接 GB2260 数据库
const gb2260 = new Database('GB2260.2023.sqlite');

// 查询所有省级单位
const provinces = gb2260.prepare('SELECT * FROM province').all();

// 查询某省的所有市
const cities = gb2260.prepare(`
  SELECT c.* FROM city c
  JOIN province p ON c.provinceCode = p.code
  WHERE p.name = ?
`).all('北京市');

// 连接 NBS 数据库
const nbs = new Database('NBS.2023.sqlite');

// 查询某县的所有乡镇
const streets = nbs.prepare(`
  SELECT * FROM street WHERE areaCode LIKE ?
`).all('110101%');

// 查询某村所属的完整层级
const hierarchy = nbs.prepare(`
  SELECT
    v.name as village,
    v.code as villageCode,
    s.name as street,
    a.name as county,
    c.name as city,
    p.name as province
  FROM village v
  JOIN street s ON v.streetCode = s.code
  JOIN area a ON v.areaCode = a.code
  JOIN city c ON v.cityCode = c.code
  JOIN province p ON v.provinceCode = p.code
  WHERE v.code = ?
`).get('110101001001');

console.log(hierarchy);

Python

python
import sqlite3

# 连接数据库
conn = sqlite3.connect('GB2260.2023.sqlite')
cursor = conn.cursor()

# 查询所有省
cursor.execute('SELECT * FROM province')
provinces = cursor.fetchall()

# 查询某省的市
cursor.execute('''
  SELECT c.* FROM city c
  JOIN province p ON c.provinceCode = p.code
  WHERE p.name = ?
''', ('北京市',))
cities = cursor.fetchall()

# 关闭连接
conn.close()

命令行

bash
# 查看数据库结构
sqlite3 GB2260.2023.sqlite ".schema"

# 查询所有省级单位
sqlite3 GB2260.2023.sqlite "SELECT * FROM province;"

# 查询某省的市
sqlite3 GB2260.2023.sqlite "SELECT * FROM city WHERE provinceCode='110000';"

注意事项

1. 台港澳处理差异

数据源台湾省香港特别行政区澳门特别行政区
GB2260(2013 起)Yes 代码 710000Yes 代码 810000Yes 代码 820000
NBS(所有层级)No 无数据No 无数据No 无数据

注意:NBS 所有层级(省 / 市 / 县 / 乡 / 村)均不收录台港澳——省级与 village 层级实测均为 0 条。此前版本文档误称「NBS village 含台港澳」,已订正。

2. 代码格式差异

数据集代码格式示例
GB22606位定长110000, 110101
NBS6/9/12位混合110000, 110101001, 110101001001

3. 外键约束

  • 两个数据库均启用了外键约束
  • 父级记录删除时,子记录的外键设为 NULL
  • 部分数据可能存在孤儿记录(历史变更导致)

4. 数据完整性

  • NBS 2021+ 数据量下降:统计口径调整,部分地区不再细分到村
  • 历史数据差异:某些年份可能存在缺失或格式异常
  • 建议使用前先验证数据完整性

5. 编码说明

  • 文件名使用 UTF-8 编码
  • SQLite 数据库内部也使用 UTF-8
  • 特殊字符(如壆壗等)可能存在兼容性问题

6. 更新频率

  • GB2260:每年 1-2 月发布上一年度数据
  • NBS:每年 1-2 月更新,数据截止到上一年年底

7. 数据文件位置

.
├── GB2260.{year}.sqlite    # GB2260 数据 (1980-2023)
├── NBS.{year}.sqlite       # NBS 数据 (2009-2023)
├── data/
│   ├── GB2260/            # 原始 JSON 文件
│   └── stats.gov.cn/      # 原始 JSON 文件 + categoryCodes
└── scripts/               # 数据处理脚本

8. 城乡分类码(categoryCode)

  • SQLite 成品不含城乡分类码village 表无 categoryCode 列(见上 Schema)。
  • 城乡分类码见原始数据:① 独立文件 data/stats.gov.cn/categoryCodes.{year}.json2009–2014;② 年度嵌套 JSON({year}.json)内的 categoryCode 内联字段覆盖 2009–2021(如 "categoryCode":"111" 主城区、"220" 村庄)。
  • 2022 年起 stats.gov.cn 停更,城乡分类码不再有新增来源。

数据来源


更新日志

日期操作
2024-01初始文档创建
- 从民政部网站抓取 GB2260 数据 (1980-2023)
- 转换 GB2260 JSON 为 SQLite
- 转换 NBS JSON 为 SQLite
- 修复 NBS 数据中的名称/代码错误

License

本项目数据来源于公开政府网站,仅供学习和研究使用。

数据来源于公开政府网站(国家统计局、民政部国家地名信息库),仅供学习与研究使用。代码以 MIT 许可。