2009-08-15 216 views
2

我正在嘗試將空間索引添加到名爲Location類型爲BLOB的表列。如果我試試這個:在MySql BLOB列上創建空間索引時出錯

ALTER TABLE route ADD SPATIAL INDEX(Location); 

我得到:

Error: BLOB/TEXT column 'Location' used in key specification without a key length

但在official docs for MySql 5.1(我使用的版本),它指的是空間索引時,明確表示:

"In MySQL 5.1, column prefix lengths are prohibited. The full width of each column is indexed."

這肯定說我不需要提供前綴。我試着反正添加前綴是這樣的:

ALTER TABLE route ADD SPATIAL INDEX(Location(256)); 

我也得到:

Error: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys

那麼究竟發生了什麼事?對於信息,我使用的是MySQL 5.1.37社區,我的表是MyISAM的,這是create語句:

CREATE TABLE `climb`.`route` ( 
`Id` int(11) NOT NULL, 
`Name` varchar(255) NOT NULL, 
`Location` blob, 
PRIMARY KEY (`Id`), 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

PS我也試圖使位置NOT NULL,這沒有什麼區別。

回答

1

應該在GEOMETRY類型上創建空間索引。

CREATE TABLE `route` (
     `Id` int(11) NOT NULL, 
     `Name` varchar(255) NOT NULL, 
     `Location` GEOMETRY NOT NULL, 
     PRIMARY KEY (`Id`), 
     SPATIAL KEY (`Location`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
+0

正確,儘管MySql支持以已知二進制(WKB)格式使用幾何列(http://dev.mysql.com/doc/refman/5.1/en/gis-wkb-format.html)的BLOB,看起來你不能有一個空間索引,訣竅是讓流利的NHibernate來做到這一點,我不得不強制使用.CustomSqlTypeIs(「GEOMETRY」)的SQL類型。 – 2009-08-17 20:33:12

0

我相信您嘗試添加空間索引的列應該聲明爲非空。

+0

感謝您的想法,但unfortunatley這已經沒有什麼區別:(我做了定位NOT NULL(更新了我的職務,以顯示這一點),並且仍然得到同樣的錯誤,當我嘗試應用空間索引。 – 2009-08-17 12:14:02