0

RSSフィードからのアイテムを保持するテーブルを作成していますが、列「description」を作成する必要があります。この列にインデックスがなく、制限が設定されていないTEXTとしてデータ型を選択しました。これは私が得ているエラーです:

#1071 - Specified key was too long; max key length is 1000 bytes

この列にインデックスを付けることを選択すると、次のエラーメッセージが表示されます。

#1170 - BLOB/TEXT column 'description' used in key specification without a key length

この列に指定した長さは、最初に取得したエラーを返します。誰かが私が間違っていることを教えてもらえますか?ありがとう!

アップデート:

MySQL5.0.4を使用しています

テーブルの作成に使用しているクエリは次のとおりです。

CREATE TABLE  `feed_items` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`feed_id` INT NOT NULL COMMENT  '`feeds`.`id`',
`guid` VARCHAR( 255 ) NOT NULL ,
`publish_date` DATETIME NOT NULL ,
`update_of` INT NULL COMMENT  '`feed_items`.`id`',
`link` VARCHAR( 255 ) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`description` TEXT NOT NULL ,
`comments_link` VARCHAR( 255 ) NULL ,
INDEX (  `feed_id` ,  `guid` ,  `publish_date` ,  `update_of` ,  `title` )
) ENGINE = MYISAM
4

1 に答える 1

1

しばらく経ちましたが、このバグレポートは、問題が発生しているようです:http: //bugs.mysql.com/bug.php ?id=4541

このバグに関するコメントを読んで、状況を参照しているかどうかを確認することをお勧めします。このエラーを取得するために使用したコマンドを確認したり、mysqlのバージョンを確認したりしないと解決できないためです。

更新:クエリに基づいて、最初にこれを削除することをお勧めします。

INDEX (  `feed_id` ,  `guid` ,  `publish_date` ,  `update_of` ,  `title` )

次に、次のことを試してください。

INDEX (  `feed_id`)

このような長いインデックスを見ると、疑わしくなります。

理想的には、選択したものにインデックスを付ける必要があります。

SELECT * FROM table WHERE feed_id=? AND guid=? AND publish_date=? AND update_of=? and title=?

その場合、このインデックスは役に立ちません。feed_idは主キーなので、次のようにする必要があります

SELECT * FROM table where feed_id=?

1行を一意に返すためです。

したがって、上記のインデックスが必要になります。タイトルとおそらくpublish_dateに別のインデックスが必要な場合もあります。

作成しているクエリを確認すると、インデックスを配置する場所を決定できます。行を追加するとインデックスのコストが高くなるため、インデックスを作成しすぎないようにしますが、インデックスの作成が少なすぎると役に立たないため、クエリを確認してから、インデックスを作成する場所を決定することをお勧めします。

于 2009-10-03T17:53:24.263 に答える