Maison > base de données > tutoriel mysql > Erreur MySQL n° 1071 : Comment résoudre « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 767 octets » ?

Erreur MySQL n° 1071 : Comment résoudre « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 767 octets » ?

Linda Hamilton
Libérer: 2024-12-13 19:41:19
original
187 Les gens l'ont consulté

MySQL Error #1071: How to Resolve

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
Copier après la connexion

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
Copier après la connexion

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) );
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal