几何列上的空间索引而非NULL列不可能

时间:2016-03-02 17:05:48

标签: mysql indexing geospatial mysql-5.7

来自mysql doc

  

几何列应为NOT NULL,但几何列不能具有DEFAULT值

当我想添加空间索引时,问题出现了,空间索引的所有部分必须不为空,如果我勾选NULL,我必须输入一个给我第一个错误的默认值。

我使用的是mysql 5.7,innodb专栏,这是我为重现这个问题所做的工作:

my origin table geotest3:
id MEDIUMINT
lat DECIMAL
lon DECIMAL

我添加了一个geom列:

alter table geotest3 add geom geometry;

接下来,我用lat lon数据填充列:

UPDATE geotest3 
  SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));

现在我无法在geom列上添加空间索引以解决上述问题。

我不知道这是一个错误,还是我错过了什么。

1 个答案:

答案 0 :(得分:2)

你忘了一步(3.)
整个程序应该是:

  1. 创建允许空值的几何列(ok)
    alter table geotest3 add geom geometry;

  2. 填写栏目(确定)
    UPDATE geotest3 SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));

  3. 现在该列不再包含空值,因此您可以使其不为空并添加空间索引(缺少步骤)

    ALTER TABLE `geotest3` 
    CHANGE COLUMN `geom` `geom` GEOMETRY NOT NULL,
    ADD SPATIAL INDEX `geom_SPATIAL` (`geom` ASC);