Sé que ya se han respondido preguntas con este título, pero sigue leyendo. He leído detenidamente todas las demás preguntas / respuestas sobre este error antes de publicarlo.
Recibo el error anterior para la siguiente consulta:
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;
¿Alguien tiene idea de por qué y cómo solucionarlo? El problema es que esta misma consulta funciona perfectamente en mi máquina local y también funcionó en mi host anterior. Por cierto, es de un proyecto maduro, phpdevshell, así que supongo que estos tipos saben lo que están haciendo, aunque nunca se sabe.
Se agradece cualquier pista.
Estoy usando phpMyAdmin.
fuente
Este error significa que la longitud del índice
index
es superior a 1000 bytes. MySQL y los motores de almacenamiento pueden tener esta restricción. Tengo un error similar en MySQL 5.5 - 'La clave especificada era demasiado larga; la longitud máxima de la clave es 3072 bytes 'cuando se ejecutó este script:UTF8 tiene varios bytes y la longitud de la clave se calcula de esta manera: 500 * 3 * 6 = 9000 bytes.
Pero tenga en cuenta que la siguiente consulta funciona.
... porque usé CHARSET = latin1, en este caso, la longitud de la clave es 500 * 6 = 3000 bytes.
fuente
Tuve este problema y lo resolví siguiendo:
Referencia
fuente
ejecute esta consulta antes de crear o modificar la tabla.
SET @@global.innodb_large_prefix = 1;
esto establecerá la longitud máxima de la clave en 3072 bytes
fuente
Este límite de tamaño de índice parece ser mayor en compilaciones de 64 bits de MySQL.
Estaba alcanzando esta limitación tratando de volcar nuestra base de datos de desarrollo y cargarla en un VMWare virt local. Finalmente me di cuenta de que el servidor de desarrollo remoto era de 64 bits y había creado una virtud de 32 bits. Acabo de crear una virtud de 64 bits y pude cargar la base de datos localmente.
fuente
Acabo de pasar por alto este error simplemente cambiando los valores de la "longitud" en la base de datos original al total de alrededor de "1000" cambiando su estructura y luego exportando lo mismo al servidor. :)
fuente
Estaba enfrentando el mismo problema, utilizado a continuación para resolverlo.
Mientras crea la base de datos, puede usar la codificación utf-8
p.ej.
create database my_db character set utf8 collate utf8mb4;
EDITAR: (Teniendo en cuenta las sugerencias de los comentarios) Se cambió utf8_bin a utf8mb4
fuente
utf8
NOutf8
lo es, es un formato propietario con errores que nunca debería haber llegado a buen término.utf8mb4
es verdaderoutf8
y es el valor predeterminado recomendado para unutf8
soporte adecuado .utf8mb4
es la codificación correcta para usar en mysql y noutf8