Maison > base de données > tutoriel mysql > Pourquoi MySQL renvoie-t-il « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets » et comment puis-je y remédier ?

Pourquoi MySQL renvoie-t-il « La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets » et comment puis-je y remédier ?

Mary-Kate Olsen
Libérer: 2024-12-10 09:02:10
original
347 Les gens l'ont consulté

Why Does MySQL Return

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

Aperçu du problème :

Quand tentative d'exécution de la requête suivante :

CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
  ...
  KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

une erreur est rencontrée : "#1071 - La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1 000 octets".

Explication :

Cette erreur se produit lorsque la longueur combinée des colonnes dans le L'index dépasse la longueur de clé maximale autorisée de 1 000 octets. Dans ce cas, l'index créé sur la table pds_core_menu_items comprend quatre colonnes : parent_menu_id, menu_link, plugin et alias, qui ont respectivement des longueurs de 32, 255, 255 et 255 octets.

Solution :

Pour résoudre ce problème, réduisez la taille du index en utilisant des longueurs de colonnes plus courtes ou en limitant le nombre de colonnes incluses dans l'index.

Approche recommandée :

L'approche recommandée consiste à utiliser des index de préfixe pour optimiser l'index taille et performances. Les index de préfixe impliquent d’indexer uniquement les premiers caractères d’une colonne de chaîne. Cette approche peut réduire considérablement la longueur de l'index.

Par exemple, la requête modifiée suivante crée un index de préfixe sur chacune des quatre colonnes :

CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
  ...
  KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Remarque supplémentaire :

De plus, il convient de noter que les types de données INT(1) et INT(32) dans la requête n'affectent pas le stockage. taille ou plage de valeurs des colonnes. INT utilise toujours 4 octets de stockage et autorise les valeurs de -2147483648 à 2147483647. L'argument numérique peut influencer le remplissage des valeurs lors de l'affichage, ce qui n'est pertinent que si ZEROFILL est utilisé.

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