質問: "Email" OR COLUMN_NAME="NormalizedEmail"); ``` 配達: ``` |---------------------|------------------| | character_set_name | column_type | |---------------------|------------------| | utf8 | varchar(256) | |---------------------|------------------| | utf8 | varchar(256) | |---------------------|------------------| ``` Edit2:ef coreによって生成された移行を手動で調整することで、この問題が解決されます。すべてのインデックスの最大長属性を256から255に変更しました。しかし、移行を調整するためにエンティティフレームワークコアを構成する方法はありますか?
回答: コメントの中で議論されたことを要約するだけです。 このエラーメッセージは、MySQLのinnodbテーブルでは、ほとんどの場合、 シングルフィールドインデックスの長さの制限が767バイトであるという事実に関連しています 。 `NormalizedEmail`フィールドには、varchar(256)のタイプとutf8の文字セットがあります。 MySQLのutf8の文字数は最大3バイトであるため、この場合のインデックスバイト長は256 * 3 + 2 = 770バイトであり、これは最大制限よりも長くなります。 可能な解決策は2つあります。 1. `create index`ステートメントのインデックス長プレフィックスを手動で255に手動で設定します。欠点は、フィールド全体がインデックスされないことです。 ``` CREATE INDEX EmailIndex ON AspNetUsers (NormalizedEmail(255)); ``` 2. 最大長制限を使用してEFコードで`NormalizedEmail`フィールドの長さを255に制限します。