2

我正在尝试向名为 Location 的 BLOB 类型的表列添加空间索引。如果我试试这个:

ALTER TABLE route ADD SPATIAL INDEX(Location); 

我得到:

错误:密钥规范中使用的 BLOB/TEXT 列“位置”没有密钥长度

但是在MySql 5.1 (我正在使用的版本)的官方文档中,它在提到空间索引时明确表示:

“在 MySQL 5.1 中,禁止列前缀长度。每列的全宽都被索引。”

这肯定说明我不需要提供前缀。我尝试添加一个前缀,如下所示:

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

我得到:

错误:不正确的前缀键;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀键

那么到底是怎么回事??对于信息,我使用 MySQL 5.1.37 社区,我的表是 MyISAM,这是创建语句:

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,这没有什么区别。

4

2 回答 2

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;
于 2009-08-17T12:30:43.737 回答
0

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

于 2009-08-16T07:20:25.427 回答