162 votes

#1071 - La clé spécifiée était trop longue ; la longueur maximale de la clé est de 1000 octets.

Je sais qu'il a déjà été répondu à des questions portant ce titre, mais je vous invite à poursuivre votre lecture. J'ai lu attentivement toutes les autres questions/réponses sur cette erreur avant de poster.

J'obtiens l'erreur ci-dessus pour la requête suivante :

CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
  `menu_id` varchar(32) NOT NULL,
  `parent_menu_id` int(32) unsigned DEFAULT NULL,
  `menu_name` varchar(255) DEFAULT NULL,
  `menu_link` varchar(255) DEFAULT NULL,
  `plugin` varchar(255) DEFAULT NULL,
  `menu_type` int(1) DEFAULT NULL,
  `extend` varchar(255) DEFAULT NULL,
  `new_window` int(1) DEFAULT NULL,
  `rank` int(100) DEFAULT NULL,
  `hide` int(1) DEFAULT NULL,
  `template_id` int(32) unsigned DEFAULT NULL,
  `alias` varchar(255) DEFAULT NULL,
  `layout` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`menu_id`),
  KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Quelqu'un sait-il pourquoi et comment le réparer ? Le problème est que cette même requête fonctionne parfaitement sur ma machine locale, et fonctionnait aussi bien sur mon hôte précédent. Il s'agit d'un projet mature - phpdevshell - donc je suppose que ces personnes savent ce qu'elles font, mais on ne sait jamais.

Tout indice sera apprécié.

J'utilise phpMyAdmin.

6voto

Sudhir Dhumal Points 698

J'étais confronté au même problème, j'ai utilisé la requête ci-dessous pour le résoudre.

En créant la base de données, vous pouvez utiliser l'encodage utf-8.

Ej. create database my_db character set utf8 collate utf8mb4;

EDIT : (Considérant les suggestions des commentaires) Changé utf8_bin en utf8mb4

3voto

Ryan Olson Points 1095

Cette limite de taille d'index semble être plus importante sur les versions 64 bits de MySQL.

Je me suis heurté à cette limitation en essayant de vider notre base de données de développement et de la charger sur un serveur virtuel VMWare local. Finalement, j'ai réalisé que le serveur de développement distant était en 64 bits et que j'avais créé une virtualité en 32 bits. J'ai simplement créé une virt 64 bit et j'ai pu charger la base de données localement.

3voto

Codeparl Points 21

Eh bien, je viens de passer de MyISAM à InnoDB comme ceci

Avant de changer

ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Après avoir changé

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2voto

Vishwadeep Kapoor Points 116

Je viens de contourner cette erreur en changeant simplement les valeurs de la "longueur" dans la base de données originale pour un total d'environ "1000" en modifiant sa structure, puis en exportant la même chose vers le serveur :)

-1voto

user2037129 Points 1

J'ai eu cette erreur et j'ai modifié la longueur des colonnes de mes tables pour réduire la longueur des colonnes de la clé étrangère indexée et je l'ai modifiée comme suit :

VARCHAR(1024)

A :

VARCHAR(512)

Et relancez la requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X