sql >> データベース >  >> RDS >> Mysql

MySQLエラー1170(42000):キーの長さがないキー仕様で使用されるBLOB/TEXT列

    新しいテーブルを作成するとき、または主キー、一意の制約、インデックスを使用して既存のテーブルを変更するとき、またはMySQLデータベースでAlter Table操作ステートメントを使用して新しいインデックスを定義するとき、次のエラーが発生し、コマンドの完了が禁止される場合があります。

    >

    エラー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未満の数値を指定します。


    1. oraclesqlの動的ピボット-手順

    2. T-SQLを使用してSQLServerデータベースをバックアップする方法

    3. 2つの日付の間のすべての日付データを表示します。特定の日付の行が存在しない場合は、すべての列にゼロを表示します

    4. SalesforceおよびOneLoginシングルサインオン(SSO)でのODBCの使用