我正在尝试将空间索引添加到名为Location BLOB类型的表列中。如果我试试这个:
ALTER TABLE route ADD SPATIAL INDEX(Location);
我明白了:
错误:BLOB / TEXT列'位置' 用于密钥规范而没有 密钥长度
但在official docs for MySql 5.1(我正在使用的版本)中,它在引用空间索引时清楚地说:
“在MySQL 5.1中,列前缀长度 被禁止。每个的全宽 列已编入索引。“
这肯定说我不需要提供前缀。我尝试添加一个前缀,如下所示:
ALTER TABLE route ADD SPATIAL INDEX(Location(256));
我得到了:
错误:前缀键不正确;使用过的 关键部分不是字符串,用过的 长度比关键部分长,或 存储引擎不支持 唯一前缀密钥
那到底是怎么回事?有关信息,我使用的是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我也试过使Location NOT NULL,这没什么区别。
答案 0 :(得分: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;
答案 1 :(得分:0)
我相信您尝试添加空间索引的列应声明为非空。