1. ホーム
  2. mysql

[解決済み] MySQL エラー: キーの長さがないキー指定

2022-01-28 17:57:21

質問

主キーがvarchar(255)であるテーブルがあります。255文字では足りない場合があります。フィールドをテキストに変更してみましたが、以下のエラーが発生します。

BLOB/TEXT column 'message_id' used in key specification without a key length

どうすれば直るのでしょうか?

edit: このテーブルには複数のカラムを持つ複合主キーがあることも指摘しておきます。

解決方法は?

このエラーは、MySQL が BLOB の最初の N 文字だけをインデックスすることができるためです。 TEXT カラムを使用します。したがって、このエラーは主にフィールド/カラムのタイプが TEXT またはBLOBに属するもの、あるいは TEXT または BLOB のようなタイプは TINYBLOB , MEDIUMBLOB , LONGBLOB , TINYTEXT , MEDIUMTEXT および LONGTEXT 主キーやインデックスを作ろうとすること。完全な BLOB または TEXT 長さの値がない場合、MySQL はカラムが可変で動的なサイズであるため、カラムの一意性を保証することができません。そのため BLOB または TEXT 型をインデックスとして使用する場合、MySQL がキーの長さを決定できるように N の値を提供する必要があります。しかし、MySQL は TEXT または BLOB . TEXT(88) は、単に動作しません。

このエラーは、テーブルのカラムを non-TEXTnon-BLOB のようなタイプです。 VARCHARENUMTEXT または BLOB タイプで、カラムが一意制約またはインデックスとして既に定義されている場合。テーブルの変更 SQL コマンドは失敗します。

この問題を解決するには TEXT または BLOB カラムをインデックスまたは一意制約から削除するか、別のフィールドを主キーに設定してください。それができない場合で、かつ TEXT または BLOB カラムを使用するようにします。 VARCHAR という型を作り、それに長さの制限をかける。デフォルトでは VARCHAR は最大255文字に制限され、その制限は宣言のすぐ後にある括弧の中で暗黙的に指定されなければなりません、すなわち VARCHAR(200) は、200文字に制限されます。

を使用しない場合でも TEXT または BLOB というエラーメッセージが表示されることがあります。を指定した場合などに発生します。 VARCHAR カラムを主キーにした場合、そのカラムの長さや文字サイズを誤って設定した場合。 VARCHAR は256文字までしか受け付けないので、例えば VARCHAR(512) を使用すると、MySQL は自動的に VARCHAR(512)SMALLTEXT この場合、そのカラムがプライマリキーまたはユニークもしくはユニークでないインデックスとして使用されると、キーの長さに関するエラー1170が発生します。この問題を解決するために、256以下の数字を VARCHAR フィールドを使用します。

参考にしてください。 MySQL エラー 1170 (42000)。BLOB/TEXT カラムがキー長なしでキー指定で使用されています。