空間數據類型分類
MySQL 實現了 OpenGIS Simple Features 規範的核心幾何類型,分為單值類型和集合類型:
單值類型(存儲單一幾何對象)
| 類型 | 說明 | 適用場景 |
| GEOMETRY | 任意幾何類型的超集 | 列需存儲混合類型幾何時 |
| POINT | 單一坐標點 | GPS 定位、POI 標記 |
| LINESTRING | 線段序列(至少兩點) | 道路、河流、軌跡線 |
| POLYGON | 閉合區域(可含內環/洞) | 行政區劃、建築輪廓、地塊 |
集合類型(存儲多個同類/異類幾何對象)
| 類型 | 成員限制 | 典型用途 |
| MULTIPOINT | 僅 Point | 多個獨立坐標點 |
| MULTILINESTRING | 僅 LineString | 道路網、管線群 |
| MULTIPOLYGON | 僅 Polygon | 多塊地塊、離散行政區 |
| GEOMETRYCOLLECTION | 任意類型混合 | 異構幾何聚合 |
類型選擇決策樹
- 業務上是否可能出現多種幾何類型混存?
→ 是 → GEOMETRY 或 GEOMETRYCOLLECTION
→ 否 → 進入 2
- 是單個對象還是多個對象?
→ 單個 → 對應單值類型 (POINT/LINESTRING/POLYGON)
→ 多個 → 對應集合類型 (MULTIPOINT 等)
- 最佳實踐: 能用具體類型就不用通用類型。具體類型:
- 存儲更緊湊(無類型標記開銷)
- 空間索引效率更高
- 應用層反序列化無需類型判斷
創建表範例
CREATE TABLE pois (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
location POINT NOT NULL, -- 單點
SPATIAL INDEX idx_location (location)
) ENGINE=InnoDB;
CREATE TABLE districts (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
boundary POLYGON NOT NULL, -- 行政區邊界
SPATIAL INDEX idx_boundary (boundary)
) ENGINE=InnoDB;
版本支持提示
- MySQL 5.7+:InnoDB 支持空間索引(SPATIAL INDEX)。
- MySQL 8.0+:完整支持 GeoJSON 輸入輸出、空間參考系統 (SRS) 管理、投影計算函數。