このエラーは、MySQLがBLOBまたはTEXTの最初のN文字のみにインデックスを付けることができるために発生します 桁。したがって、エラーは主にTEXTのフィールド/列タイプがある場合に発生します またはBLOBまたはTEXTに属するもの またはBLOB TINYBLOBなどのタイプ 、MEDIUMBLOB 、LONGBLOB 、TINYTEXT 、MEDIUMTEXT 、およびLONGTEXT 主キーまたはインデックスを作成しようとしていること。完全なBLOBを使用 またはTEXT 長さの値がないと、MySQLは可変で動的なサイズであるため、列の一意性を保証できません。したがって、BLOBを使用する場合 またはTEXT タイプをインデックスとして使用する場合、MySQLがキーの長さを決定できるように、Nの値を指定する必要があります。ただし、MySQLはTEXTのキー長制限をサポートしていません またはBLOB 。 TEXT(88) 単に機能しません。
テーブルの列をnon-TEXTから変換しようとすると、エラーもポップアップ表示されます およびnon-BLOB VARCHARなどのタイプ およびENUM TEXTに またはBLOB タイプ。列はすでに一意の制約またはインデックスとして定義されています。 AlterTableSQLコマンドは失敗します。
この問題の解決策は、TEXTを削除することです。 またはBLOB インデックスまたは一意性制約からの列、または主キーとして別のフィールドを設定します。それができず、TEXTに制限を設けたい場合 またはBLOB 列、VARCHARを使用してみてください 入力して長さの制限を設定します。デフォルトでは、VARCHAR は最大255文字に制限されており、その制限は宣言の直後の括弧内に暗黙的に指定する必要があります。つまり、VARCHAR(200) 長さは200文字に制限されます。
TEXTを使用していなくても またはBLOB テーブル内の関連するタイプでは、エラー1170も表示される場合があります。 VARCHARを指定した場合などに発生します 列を主キーとして使用しますが、長さまたは文字サイズを誤って設定します。 VARCHAR 最大256文字しか受け入れられないため、VARCHAR(512)など MySQLにVARCHAR(512)の自動変換を強制します SMALLTEXTに データ型。列が主キーまたは一意または非一意のインデックスとして使用されている場合、キーの長さでエラー1170で失敗します。この問題を解決するには、VARCHARのサイズとして256未満の数字を指定します フィールド。
参照: MySQLエラー1170(42000):キーの長さがないキー仕様で使用されるBLOB/TEXT列