几何列上的空间索引而不是 NULL 列不可能
Spatial index on geometry column and not NULL column impossible
来自 mysql 文档
A geometry column should be NOT NULL, but a geometry column cannot have DEFAULT values
所以当我想添加一个空间索引时,问题就来了,空间索引的所有部分都不能为空,如果我勾选 NULL,我必须输入一个默认值,这给了我第一个错误。
我正在使用 mysql 5.7,innodb 专栏,这是我为重现问题所做的工作:
my origin table geotest3:
id MEDIUMINT
lat DECIMAL
lon DECIMAL
我添加了一个 geom 列:
alter table geotest3 add geom geometry;
接下来我用经纬度数据填充该列:
UPDATE geotest3
SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));
现在我无法为上述问题在 geom 列上添加空间索引。
我不知道这是一个错误还是我遗漏了什么。
您忘记了一步 (3.)
整个过程应该是:
创建允许空值的几何列(确定)
alter table geotest3 add geom geometry;
填写你的栏目(确定)
UPDATE geotest3
SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));
现在该列不再包含空值,因此您可以使其不为空并添加空间索引(缺少步骤)
ALTER TABLE `geotest3`
CHANGE COLUMN `geom` `geom` GEOMETRY NOT NULL,
ADD SPATIAL INDEX `geom_SPATIAL` (`geom` ASC);
来自 mysql 文档
A geometry column should be NOT NULL, but a geometry column cannot have DEFAULT values
所以当我想添加一个空间索引时,问题就来了,空间索引的所有部分都不能为空,如果我勾选 NULL,我必须输入一个默认值,这给了我第一个错误。
我正在使用 mysql 5.7,innodb 专栏,这是我为重现问题所做的工作:
my origin table geotest3:
id MEDIUMINT
lat DECIMAL
lon DECIMAL
我添加了一个 geom 列:
alter table geotest3 add geom geometry;
接下来我用经纬度数据填充该列:
UPDATE geotest3
SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));
现在我无法为上述问题在 geom 列上添加空间索引。
我不知道这是一个错误还是我遗漏了什么。
您忘记了一步 (3.)
整个过程应该是:
创建允许空值的几何列(确定)
alter table geotest3 add geom geometry;
填写你的栏目(确定)
UPDATE geotest3 SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));
现在该列不再包含空值,因此您可以使其不为空并添加空间索引(缺少步骤)
ALTER TABLE `geotest3` CHANGE COLUMN `geom` `geom` GEOMETRY NOT NULL, ADD SPATIAL INDEX `geom_SPATIAL` (`geom` ASC);