Maison >base de données >tutoriel mysql >Comment résoudre l'erreur MySQL 1071 : « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets » ?

Comment résoudre l'erreur MySQL 1071 : « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-13 19:21:10690parcourir

How to Solve MySQL Error 1071:

Erreur MySQL 1071 : "La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets"

Lors de la création d'une table MySQL avec un index composite, les utilisateurs peuvent rencontrer le erreur "La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets". Cette erreur indique que la longueur combinée des colonnes indexées dépasse la taille de stockage maximale autorisée de 1 000 octets.

Le problème dans l'extrait de code fourni réside dans la longueur excessive de l'index composite :

KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)

Résolution

Pour résoudre cette erreur, considérez ce qui suit :

1. Optimiser la longueur de l'index :

  • Les colonnes VARCHAR longues ne doivent généralement pas être indexées en raison d'index volumineux et inefficaces.
  • Utilisez des index de préfixe pour indexer uniquement un sous-ensemble de données, ce qui est généralement beaucoup plus court que la longueur totale de la colonne.
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))

2. Déterminer la longueur optimale du préfixe :

Utilisez la requête suivante pour déterminer la longueur optimale du préfixe pour une colonne donnée :

SELECT
 ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10,
 ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20,
 ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50,
 ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100
FROM `pds_core_menu_items`;

Par exemple, si la requête renvoie :

+---------------+---------------+---------------+----------------+
| pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 |
+---------------+---------------+---------------+----------------+
|         21.78 |         80.20 |        100.00 |         100.00 |
+---------------+---------------+---------------+----------------+

Cela indique que 80 % des chaînes comportent moins de 20 caractères, donc une longueur de préfixe de 50 est suffisant.

3. Ajuster les types de données INT :

Le type de données INT suivi d'un argument numérique (par exemple, INT(1)) n'affecte pas le stockage ou la plage de valeurs. Les types de données INT occupent toujours 4 octets et autorisent des valeurs comprises entre -2147483648 et 2147483647. L'argument numérique n'affecte que le remplissage lors de l'affichage.

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!

Déclaration:
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