2

BLOB 型の Location という名前のテーブル列に空間インデックスを追加しようとしています。私がこれを試してみると:

ALTER TABLE route ADD SPATIAL INDEX(Location); 

私は得る:

エラー: BLOB/TEXT カラム 'Location' がキーの長さを指定せずにキー指定で使用されました

しかし、MySql 5.1 (私が使用しているバージョン) の公式ドキュメントでは、空間インデックスを参照するときに次のように明確に述べています。

「MySQL 5.1 では、列のプレフィックスの長さは禁止されています。各列の全幅がインデックス化されています。」

これは確かに、プレフィックスを提供する必要がないことを示しています。とにかく次のようにプレフィックスを追加してみました:

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

そして私は得る:

エラー: プレフィックス キーが正しくありません。使用されたキー部分が文字列ではない、使用された長さがキー部分よりも長い、またはストレージ エンジンが一意のプレフィックス キーをサポートしていない

それで、一体何が起こっているのですか?? 情報として、私は MySQL 5.1.37 コミュニティを使用しています。私のテーブルは MyISAM です。これは 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私も場所を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

空間インデックスを追加しようとしている列は、null ではないと宣言する必要があると思います。

于 2009-08-16T07:20:25.427 に答える