Erreur MySQL n° 1071 : Comprendre les contraintes de longueur de clé
Lorsque vous essayez de créer une clé unique pour une table de base de données, vous rencontrez l'erreur suivante :
#1071 - Specified key was too long; max key length is 767 bytes
Le message d'erreur indique que la clé spécifiée dépasse la longueur maximale autorisée pour les tables InnoDB, ce qui est de 767 octets. Ce comportement est souvent observé dans les versions antérieures de MySQL, telles que 5.6 et versions antérieures.
Calculs d'octets pour les colonnes VARCHAR
Vous avez des colonnes colonne1 de type VARCHAR(20) et colonne2 de type VARCHAR(500). Au départ, vous pourriez supposer que la clé nécessiterait 21 501 = 522 octets, ce qui est inférieur à 767. Cependant, cette hypothèse est incorrecte.
Comprendre les limitations de longueur des préfixes
La documentation MySQL indique que la longueur maximale du préfixe des clés est de 767 octets. Cette limite de longueur s'applique à la longueur combinée des colonnes incluses dans la clé. Dans ce cas, la longueur totale de la clé est de 21 500 = 521 octets, soit moins de 767.
Cependant, il est important de noter que la limitation de la longueur du préfixe dépend en réalité du codage de caractères utilisé par les colonnes. Pour les colonnes non Unicode comme VARCHAR(20), chaque caractère nécessite un octet. Cependant, pour les colonnes Unicode, telles que VARCHAR(500) utf8_general_ci, chaque caractère peut nécessiter plusieurs octets.
Calcul des octets pour les colonnes Unicode
Dans ce cas, la colonne 2 est une colonne Unicode. Le jeu de caractères utf8_general_ci utilise jusqu'à 3 octets par caractère. Par conséquent, la longueur réelle de la clé pour les colonnes Unicode est calculée en multipliant la longueur des caractères par le nombre d'octets par caractère :
20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes
Solution : raccourcir le préfixe de clé
Étant donné que la longueur de la clé dépasse la limite maximale, vous pouvez résoudre l'erreur en raccourcissant le préfixe de la clé. Ceci peut être réalisé en limitant le nombre de caractères indexés pour la colonne 2. Par exemple :
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Cet ajustement réduit la longueur totale de la clé à 21 (200 * 3) = 621 octets, ce qui est désormais conforme à la limitation de longueur de préfixe de 767 octets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!