我正在嘗試將空間索引添加到名爲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,這沒有什麼區別。
正確,儘管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