Sei que perguntas com este título já foram respondidas antes, mas por favor, continue lendo. Li cuidadosamente todas as outras perguntas / respostas sobre este erro antes de postar.
Estou recebendo o erro acima para a seguinte 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;
Alguém tem ideia do porquê e como consertar? O problema é - essa mesma consulta funciona perfeitamente na minha máquina local e funcionou bem no meu host anterior. Btw.é de um projeto maduro - phpdevshell - então eu acho que esses caras sabem o que estão fazendo, embora você nunca saiba.
Qualquer pista é apreciada.
Estou usando o phpMyAdmin.
fonte
Este erro significa que o comprimento do índice
index
é superior a 1000 bytes. MySQL e mecanismos de armazenamento podem ter essa restrição. Recebi um erro semelhante no MySQL 5.5 - 'A chave especificada era muito longa; o comprimento máximo da chave é 3072 bytes 'quando este script foi executado:UTF8 é multi-bytes e o comprimento da chave é calculado desta forma - 500 * 3 * 6 = 9000 bytes.
Mas observe, a próxima consulta funciona!
... porque usei CHARSET = latin1, neste caso o comprimento da chave é 500 * 6 = 3000 bytes.
fonte
Eu tive esse problema e resolvi da seguinte maneira:
Referência
fonte
execute esta consulta antes de criar ou alterar a tabela.
SET @@global.innodb_large_prefix = 1;
isso definirá o comprimento máximo da chave em 3072 bytes
fonte
Este limite de tamanho de índice parece ser maior em compilações de 64 bits do MySQL.
Eu estava atingindo essa limitação ao tentar despejar nosso banco de dados dev e carregá-lo em um VMWare virt local. Finalmente percebi que o servidor de desenvolvimento remoto era de 64 bits e criei um virt de 32 bits. Acabei de criar um virt de 64 bits e consegui carregar o banco de dados localmente.
fonte
Acabei de contornar esse erro alterando apenas os valores do "comprimento" no banco de dados original para um total de cerca de "1000" alterando sua estrutura e, em seguida, exportando a mesma para o servidor. :)
fonte
Eu estava enfrentando o mesmo problema, usei a consulta abaixo para resolvê-lo.
Ao criar o banco de dados, você pode usar a codificação utf-8
por exemplo.
create database my_db character set utf8 collate utf8mb4;
EDITAR: (Considerando sugestões de comentários) utf8_bin alterado para utf8mb4
fonte
utf8
NÃO éutf8
, é um formato proprietário bugado que nunca deveria ter se concretizado.utf8mb4
é verdadeiroutf8
e é o padrão recomendado parautf8
suporte adequado .utf8mb4
é a codificação correta para usar no mysql e nãoutf8