2009-08-15 8 views
2

J'essaie d'ajouter un index spatial à une colonne de table nommée Location de type BLOB. Si j'essaie ceci:Erreur lors de la création de l'index spatial sur la colonne MySQL BLOB

ALTER TABLE route ADD SPATIAL INDEX(Location); 

Je reçois:

Error: BLOB/TEXT column 'Location' used in key specification without a key length

Mais dans le official docs for MySql 5.1 (la version que je me sers), il est dit clairement en se référant à des index spatiaux:

"In MySQL 5.1, column prefix lengths are prohibited. The full width of each column is indexed."

Cela dit sûrement que je n'ai pas besoin de fournir un préfixe. J'ai essayé d'ajouter un préfixe en tout cas comme celui-ci:

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

et je reçois:

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

Alors, que diable se passe ?? Pour info, je suis en utilisant la communauté MySQL 5.1.37, et ma table est MyISAM, c'est la 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 J'ai aussi essayé de faire NOT NULL Lieu, cela ne fait aucune différence.

Répondre

1

Les index spatiaux doivent être créés sur les types 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

Correct, bien que MySQL prenne en charge l'utilisation de BLOB pour les colonnes géométriques (http://dev.mysql.com/doc/refman/5.1/en/gis-wkb-format.html) au format binaire connu (WKB), il semble que vous ne pouvez pas avoir d'index spatial, le truc étant que Fluent NHibernate a fait ça, j'ai dû forcer le type SQL avec .CustomSqlTypeIs ("GEOMETRY"). –

0

Je crois que la colonne que vous essayez d'ajouter à l'index spatial doit être déclarée non nulle.

+0

Merci pour l'idée, mais unfortunatley cela n'a fait aucune différence :(J'ai emplacement NOT NULL (ont mis à jour mon post pour montrer), et toujours obtenir la même erreur lorsque je tente d'appliquer un index spatial –

Questions connexes