首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 空間數據類型詳解:單值與集合類型、GEOMETRY 層級結構與選擇指南

     編輯:MySQL 綜合教學

空間數據類型分類

MySQL 實現了 OpenGIS Simple Features 規範的核心幾何類型,分為單值類型和集合類型:

單值類型(存儲單一幾何對象)

類型說明適用場景
GEOMETRY任意幾何類型的超集列需存儲混合類型幾何時
POINT單一坐標點GPS 定位、POI 標記
LINESTRING線段序列(至少兩點)道路、河流、軌跡線
POLYGON閉合區域(可含內環/洞)行政區劃、建築輪廓、地塊

集合類型(存儲多個同類/異類幾何對象)

類型成員限制典型用途
MULTIPOINT僅 Point多個獨立坐標點
MULTILINESTRING僅 LineString道路網、管線群
MULTIPOLYGON僅 Polygon多塊地塊、離散行政區
GEOMETRYCOLLECTION任意類型混合異構幾何聚合

類型選擇決策樹

  1. 業務上是否可能出現多種幾何類型混存?
    → 是 → GEOMETRY 或 GEOMETRYCOLLECTION
    → 否 → 進入 2
  2. 是單個對象還是多個對象?
    → 單個 → 對應單值類型 (POINT/LINESTRING/POLYGON)
    → 多個 → 對應集合類型 (MULTIPOINT 等)
  3. 最佳實踐: 能用具體類型就不用通用類型。具體類型:
    • 存儲更緊湊(無類型標記開銷)
    • 空間索引效率更高
    • 應用層反序列化無需類型判斷

創建表範例

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) 管理、投影計算函數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved