これについて多くの質問があったことは承知していますが、私の計算は正しいと思います。
- MySQL は、UTF8 文字ごとに 3 バイトを予約します。
- MyISAM では、長さ 1000 バイトのキーを使用できます。
- 私の UTF8 VARCHAR(255)はバイトでなければなりません
255 * 3 = 765
UNQUE がエントリごとに余分な 200+ バイトを必要としない限り、なぜこれが機能しないのですか?
mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
これについて私にできることはありますか?
編集:
制限は 250 であることが判明しました。文字は一意のインデックスに対して 4 バイトとしてカウントされるようですが、その理由はわかりません。
編集2:
Vladislav Vaintroub に感謝します。文字セットは確かに utf8mb4 です。それで謎が解けます。この変更に関するドキュメントは見たことがありません。
フィールドを暗黙的に切り捨てることによって非一意のインデックスを構築すると推測していますが、これは一意のインデックスには受け入れられないため、拒否されます。
回答としてコメントを再入力していただければ、喜んで受け入れます。
解決策: utf8mb4 ではなく utf8 を指定します (MySQL 管理者はこれを許可していないため、テーブルを手動で作成します)。