MySQL 具有与 OpenGIS 类相对应的空间数据类型。这些类型的基础在 第 13.4.2 节“OpenGIS 几何模型” 中进行了描述。
一些空间数据类型保存单个几何值
GEOMETRY
POINT
LINESTRING
POLYGON
GEOMETRY
可以存储任何类型的几何值。其他单值类型(POINT
、LINESTRING
和 POLYGON
)将其值限制为特定的几何类型。
其他空间数据类型保存值的集合
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
GEOMETRYCOLLECTION
可以存储任何类型对象的集合。其他集合类型(MULTIPOINT
、MULTILINESTRING
和 MULTIPOLYGON
)将集合成员限制为具有特定几何类型的成员。
示例:要创建一个名为 geom
的表,该表具有一列名为 g
的列,该列可以存储任何几何类型的值,请使用以下语句
CREATE TABLE geom (g GEOMETRY);
具有空间数据类型的列可以具有 SRID
属性,以显式指示存储在列中的值的 spatial reference system (SRS)。例如
CREATE TABLE geom (
p POINT SRID 0,
g GEOMETRY NOT NULL SRID 4326
);
如果空间列为 NOT NULL
并具有特定的 SRID,则可以在其上创建 SPATIAL
索引,因此如果您计划为该列编制索引,请使用 NOT NULL
和 SRID
属性声明它
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326);
InnoDB
表允许笛卡尔坐标系和地理坐标系的 SRID
值。MyISAM
表允许笛卡尔坐标系的 SRID
值。
SRID
属性使空间列受 SRID 限制,这意味着
该列只能包含具有给定 SRID 的值。尝试插入具有不同 SRID 的值将产生错误。
优化器可以在该列上使用
SPATIAL
索引。请参阅 第 10.3.3 节“SPATIAL 索引优化”。
没有 SRID
属性的空间列不受 SRID 限制,并且接受具有任何 SRID 的值。但是,在修改列定义以包含 SRID
属性之前,优化器无法在其上使用 SPATIAL
索引,这可能需要首先修改列内容,以便所有值都具有相同的 SRID。
有关在 MySQL 中如何使用空间数据类型的其他示例,请参阅 第 13.4.6 节“创建空间列”。有关空间参考系统的信息,请参阅 第 13.4.5 节“空间参考系统支持”。