4

来自 mysql 文档

几何列不应为 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 列上添加空间索引来解决上述问题。

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

4

1 回答 1

3

您忘记了一步(3。)
整个过程应该是:

  1. 创建允许空值的几何列(确定)
    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);
    
于 2016-03-09T09:09:15.733 回答