2009-08-15 5 views
2

위치 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 문이다 : 나는 또한 위치 NULL NOT 만드는 시도

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,이 차이를하지 않았다.

답변

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; 
+0

MySql은 Well-Known Binary (WKB) 형식의 기하 구조 열 (http://dev.mysql.com/doc/refman/5.1/en/gis-wkb-format.html)에 BLOB를 사용하는 것을 지원하지만, 그것은 당신이 공간 인덱스를 가질 수없는 것 같습니다. 트릭은 유창한 NHibernate이 일을하고, 나는 SQL 형식을 강제로했다. CustomSqlTypeIs ("기하학"). 감사합니다! –

0

공간 인덱스를 추가하려고하는 열이 null이 아니어야한다고 생각합니다.

+0

덕분에,이 차이를 만들어 없다 unfortunatley하지만 :(내가 만든 위치 NULL NOT (이 보여 내 게시물을 업데이트 한), 나는 공간 인덱스를 적용하려고하면 여전히 같은 오류가 –

관련 문제