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节,“空间参考系统支持”。