2016-03-02 69 views
1

从MySQL文档几何列的空间索引,而不是NULL列不可能

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

所以,问题是当我想要添加一个空间索引,空间索引的所有部分必须不为空,如果我勾选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列上添加空间索引。

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

+2

我猜PB意思的问题?不要用聊天来形容你的问题。请阅读[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t这里是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),了解如何提高您的问题质量并获得更好的答案。 –

回答

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); 
    
+0

thx,这是工作与你的方式,但strangly,如果你添加第四步这不会..对我来说,如果我使列NOT NULL作为第3步,并添加空间索引作为第4步,它不再工作了,唐不知道为什么.. – jess

相关问题