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が、これは何の違いが行われていません。
MySqlはWell-Known Binary(WKB)形式のジオメトリ列(http://dev.mysql.com/doc/refman/5.1/en/gis-wkb-format.html)のBLOBの使用をサポートしていますが、それは、あなたが空間インデックスを持つことができないようです。トリックは、これを行うには、Fluent NHibernateを得ていた、私はSQL型を強制する必要があった。カスタムSQLTypeIs( "ジオメトリー")。 –