このエラーは、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列