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;
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;
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!