Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur MySQL #1071 - La clé spécifiée était trop longue; la longueur maximale de la clé est de 767 octets

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 .