767 octets dans MySQL version 5.6 (et versions antérieures), est la limitation de préfixe indiquée pour les tables InnoDB. Il fait 1 000 octets pour les tables MyISAM. Cette limite a été augmentée à 3072 octets dans MySQL version 5.7 (et vers le haut).
Vous devez également être conscient que si vous définissez un index sur un gros caractère ou varchar
champ qui est utf8mb4
codé, vous devez diviser la longueur maximale du préfixe d'index de 767 octets (ou 3072 octets) par 4, ce qui donne 191 . C'est parce que la longueur maximale d'un utf8mb4
caractère est de quatre octets. Pour un utf8
caractère, il serait de trois octets résultant en une longueur maximale de préfixe d'index de 255 (ou moins null-terminator, 254 caractères).
Une option que vous avez est de simplement placer une limite inférieure sur votre VARCHAR
champs.
Une autre option (selon la réponse à ce problème ) consiste à obtenir le sous-ensemble de la colonne plutôt que le montant total, c'est-à-dire :
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Ajustez car vous devez obtenir la clé à appliquer, mais je me demande s'il vaudrait la peine de revoir votre modèle de données concernant cette entité pour voir s'il y a des améliorations possibles, ce qui vous permettrait d'implémenter les règles commerciales prévues sans atteindre la limitation MySQL .