1

I had this in my models.py

category = models.CharField(max_length=1024, null=False)

I changed it to this:

category = models.CharField(max_length=256, null=False)

and migrated successfully.

and then I changed it to this:

category = models.CharField(max_length=256, null=False, db_index=True)

While migrating I get this:

_mysql_exceptions.Warning: Specified key was too long; max key length is 767 bytes

and migration breaks.

ただし、phpmyadmin パネルを開くと、インデックスが作成されていることがわかります。

気にする必要がありますか?この警告が表示されないようにする必要がありますか? この警告は重要ですか?

編集:フィールド照合はutf8_general_ci

4

1 に答える 1

2

MySQL 5.6 doc: Limits on InnoDB Tables によると

デフォルトでは、単一列インデックスのインデックス キーは最大 767 バイトです。同じ長さの制限が、すべてのインデックス キー プレフィックスに適用されます。

許可されている長さよりも長いインデックス プレフィックス長を指定しようとすると、その長さは暗黙のうちに一意でないインデックスの最大長に短縮されます

一意のインデックスの場合、インデックス プレフィックスの制限を超えるとエラーが発生します。レプリケーション構成でこのようなエラーを回避するには、マスターで innodb_large_prefix オプションを設定することは避けてください (スレーブでも設定できず、スレーブにこの制限の影響を受ける可能性のある一意のインデックスがある場合)。

于 2013-11-01T09:52:58.397 に答える