MySQLバージョン5.6では767バイト (および以前のバージョン)は、指定されたプレフィックス制限 InnoDBテーブルの場合。 MyISAMテーブルの長さは1,000バイトです。この制限は、MySQLバージョン5.7では3072バイトに引き上げられました。 (およびそれ以上)。
また、大きな文字またはvarchar
にインデックスを設定する場合にも注意する必要があります。 utf8mb4
であるフィールド エンコードされている場合、インデックスプレフィックスの最大長である767バイト(または3072バイト)を4で割る必要があり、結果として 191になります。 。これは、utf8mb4
の最大長が原因です。 文字は4バイトです。 utf8
の場合 文字は3バイトになり、インデックスプレフィックスの最大長は 255になります。 (またはマイナスヌルターミネータ、254文字)。
選択肢の1つは、VARCHAR
に下限を設定することです。 フィールド。
別のオプション(この問題への対応 による )は、全量ではなく、列のサブセットを取得することです。つまり、:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
適用するキーを取得する必要があるので微調整しますが、このエンティティに関するデータモデルを確認して、MySQLの制限に達することなく目的のビジネスルールを実装できる改善があるかどうかを確認する価値があるのではないかと思います。 。