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
属性,以明确指示存储在列中的值的地理空间参考系统 (SRS)。例如
CREATE TABLE geom (
p POINT SRID 0,
g GEOMETRY NOT NULL SRID 4326
);
SPATIAL
索引可以在空间列上创建,前提是它们为 NOT NULL
且具有特定的 SRID,因此,如果您计划为该列建立索引,请使用 NOT NULL
和 SRID
属性声明该列
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326);
InnoDB
表允许笛卡尔和地理 SRS 的 SRID
值。 MyISAM
表允许笛卡尔 SRS 的 SRID
值。
SRID
属性使空间列成为 SRID 受限的,这具有以下含义
该列只能包含具有给定 SRID 的值。尝试插入具有不同 SRID 的值会导致错误。
优化器可以使用该列上的
SPATIAL
索引。请参见第 10.3.3 节,“SPATIAL 索引优化”。
没有 SRID
属性的空间列不受 SRID 限制,并接受具有任何 SRID 的值。但是,优化器无法使用它们上的 SPATIAL
索引,直到列定义被修改为包含 SRID
属性,这可能需要先修改列内容,以便所有值都具有相同的 SRID。
有关在 MySQL 中如何使用空间数据类型的其他示例,请参见第 13.4.6 节,“创建空间列”。有关空间参考系统的更多信息,请参见第 13.4.5 节,“空间参考系统支持”。