几何列上的空间索引和非 NULL 列不可行。

5

从mysql文档中得知:

几何列应该是NOT NULL,但是几何列不能有默认值

所以当我想要添加空间索引时,所有的空间索引部分都必须是非空的,如果勾选了NULL,则必须输入一个默认值,这会导致第一个错误。

我在使用mysql 5.7,innodb列,在这里是我为了重现问题所做的:

my origin table geotest3:
id MEDIUMINT
lat DECIMAL
lon DECIMAL

我已经添加了一个几何列:

alter table geotest3 add geom geometry;

下一步,我将使用经纬度数据填充该列:
UPDATE geotest3 
  SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));

现在,由于上述问题的解释,我无法在geom列上添加空间索引。

我不知道是否是个bug还是我漏掉了什么东西。


2
我猜pb指的是问题?请勿使用聊天用语描述您的问题。请阅读如何提问。而这里是一个非常好的地方开始学习如何提高您的问题质量并获得更好的答案。 - Juan Carlos Oropeza
1个回答

3
你忘了一步(第三步),整个过程应该是:

1. 打开计算机
2. 运行软件
3. 做你需要做的事情

  1. Create you geometry column allowing null values (ok)
    alter table geotest3 add geom geometry;

  2. Fill you column (ok)
    UPDATE geotest3 SET geom = PointFromText(CONCAT('POINT(',geotest3.lon,' ',geotest3.lat,')'));

  3. Now the column doesn't contain null value anymore, so you can make it not null and add the spatial index (missing step)

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

谢谢,按照您的方法这个确实可以工作,但奇怪的是,如果再加上第四步,它就不能工作了。对我来说,如果我把将列设置为NOT NULL作为第三步,并将空间索引添加为第四步,则不再起作用,不知道为什么。 - albator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接