2016-03-02 40 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

相關問題