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
索引可以在空间列上创建,如果它们不是NULL
并且具有特定的SRID,因此,如果您计划索引该列,请使用NOT NULL
和SRID
属性声明:
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326);
InnoDB
表允许Cartesian和地理SRS的SRID值。MyISAM
表允许Cartesian SRS的SRID值。
该SRID
属性使空间列成为SRID-restricted,这有以下含义:
-
该列只能包含具有给定SRID的值。尝试插入具有不同SRID的值将产生错误。
-
优化器可以使用
SPATIAL
索引在该列上。见第10.3.3节,“SPATIAL索引优化”。
没有SRID
属性的空间列不是SRID-restricted的,并接受任何SRID的值。然而,优化器不能使用SPATIAL
索引,直到该列定义被修改以包括SRID
属性,这可能需要首先修改列内容,以便所有值具有相同的SRID。
有关在MySQL中使用空间数据类型的其他示例,请参见第13.4.6节,“创建空间列”。有关空间参考系统的信息,请参见第13.4.5节,“空间参考系统支持”。