在MySql BLOB列上创建空间索引时出错

时间:2009-08-15 21:55:16

标签: mysql blob myisam mysql-error-1170

我正在尝试将空间索引添加到名为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,这没什么区别。

2 个答案:

答案 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)

我相信您尝试添加空间索引的列应声明为非空。