我正在尝试将空间索引添加到名为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