エラー1170(42000):キーの長さがないキー指定でBLOB/TEXT列「field_name」が使用されました
MySQLはBLOBまたはTEXT列の最初のN文字のみにインデックスを付けることができるため、エラーが発生します。したがって、エラーは主に、フィールド/列タイプがTEXTまたはBLOBであるか、主キーまたはインデックスとして作成しようとしているTINYBLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、MEDIUMTEXT、LONGTEXTなどのTEXTまたはBLOBタイプに属する場合に発生します。長さの値がない完全なBLOBまたはTEXTの場合、MySQLは可変で動的なサイズであるため、列の一意性を保証できません。したがって、インデックスとしてBLOBまたはTEXTタイプを使用する場合、MySQLがキーの長さを決定できるように、Nの値を指定する必要があります。ただし、MySQLはTEXTまたはBLOBの制限をサポートしていません。 TEXT(88)は単に機能しません。
このエラーは、テーブル列を非TEXTおよび非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未満の数値を指定します。