2009-08-15 14 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文である:私も場所は、NOT NULL作るしようとしている

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の使用をサポートしていますが、それは、あなたが空間インデックスを持つことができないようです。トリックは、これを行うには、Fluent NHibernateを得ていた、私はSQL型を強制する必要があった。カスタムSQLTypeIs( "ジオメトリー")。 –

0

空間インデックスを追加しようとする列がnullでないと宣言されているはずです。

+0

アイデアをありがとう、しかし、これは私が(これを表示するために私のポストを更新しました)場所はNOT NULLで作られた、と私は空間インデックスを適用しようとすると、まだ同じエラーを取得している:(何の違いを行っていないunfortunatley 。 –

関連する問題