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 » ?
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`)
Pour résoudre cette erreur, considérez ce qui suit :
1. Optimiser la longueur de l'index :
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!