MySQL エラー: キーの長さが指定されていないキー指定 質問する

MySQL エラー: キーの長さが指定されていないキー指定 質問する

varchar(255) の主キーを持つテーブルがあります。255 文字では足りないケースがいくつか発生しました。フィールドをテキストに変更しようとしましたが、次のエラーが発生します。

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

これをどうすれば修正できますか?

編集: このテーブルには複数の列を持つ複合主キーがあることも指摘しておく必要があります。

ベストアンサー1

このエラーは、MySQL が BLOB または列の最初の N 文字しかインデックス付けできないために発生しますTEXT。したがって、このエラーは主に、 または BLOB のフィールド/列タイプ、または 、 、 、 、 などの または タイプに属するフィールド/列タイプがあり、それらを使用して主キーまたはインデックスを作成しようとする場合に発生します。長TEXTさの値が完全であるかないかにかかわらず、MySQL は可変で動的なサイズであるため、列の一意性を保証できません。したがって、またはタイプをインデックスとして使用する場合、MySQL がキーの長さを決定できるように N の値を指定する必要があります。ただし、MySQL はまたはのキーの長さ制限をサポートしていません。単に機能しません。TEXTBLOBTINYBLOBMEDIUMBLOBLONGBLOBTINYTEXTMEDIUMTEXTLONGTEXTBLOBTEXTBLOBTEXTTEXTBLOBTEXT(88)

また、列が既に一意制約またはインデックスとして定義されている場合に、テーブル列をandなどのnon-TEXTand型からor型に変換しようとすると、エラーが発生します。Alter Table SQL コマンドは失敗します。non-BLOBVARCHARENUMTEXTBLOB

この問題の解決策は、インデックスまたは一意制約からTEXTまたは列を削除するか、別のフィールドを主キーとして設定することです。それができず、または列に制限を設定したい場合は、 type を使用して長さの制限を設定してみてください。デフォルトでは、 は最大 255 文字に制限されており、その制限は宣言の直後の括弧内に暗黙的に指定する必要があります。つまり、 は200 文字の長さに制限されます。BLOBTEXTBLOBVARCHARVARCHARVARCHAR(200)

TEXT場合によっては、テーブルでまたは関連する型を使用していない場合でもBLOB、エラー 1170 が表示されることがあります。これは、VARCHAR列を主キーとして指定したが、その長さまたは文字サイズを誤って設定した場合などに発生します。 はVARCHAR最大 256 文字しか受け入れないため、 などの文字はMySQL に をデータ型にVARCHAR(512)自動変換するように強制し、その後、列が主キーまたは一意または非一意のインデックスとして使用されている場合にキーの長さに関するエラー 1170 で失敗します。この問題を解決するには、フィールドのサイズとして 256 未満の数値を指定します。VARCHAR(512)SMALLTEXTVARCHAR

参照:MySQL エラー 1170 (42000): キー長を指定せずにキー仕様で BLOB/TEXT 列が使用されている

おすすめ記事