Erro no MySQL: Error Code: 1071. Specified key was too long; max key length is 1000 bytes

Tentei criar no MySQL as tabelas responsáveis pelo gerenciamento de usuários do Asp.net, o Identity.

O Identity precisa das tabelas Roles, Users, UserClaims, Userlogins e Userroles. Quando chegava a hora de criar a tabela Userlogins, com o código abaixo dava o erro:

CREATE TABLE `userlogins` (
  `LoginProvider` varchar(128) NOT NULL,
  `ProviderKey` varchar(128) NOT NULL,
  `UserId` varchar(128) NOT NULL,
  PRIMARY KEY (`LoginProvider`,`ProviderKey`,`UserId`),
  KEY `ApplicationUser_Logins` (`UserId`),
  CONSTRAINT `ApplicationUser_Logins` FOREIGN KEY (`UserId`) REFERENCES `users` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION
);
 
Error Code: 1071. Specified key was too long; max key length is 1000 bytes.

Depois de algumas tentativas descobri uma solução simples.
O MySQL estava criando as tabelas com a Engine MyISAM. Troquei para a Engine InnoDB e as tabelas e relacionamentos foram criados sem problema. 
Para alterar a engine basta digitar:

ALTER TABLE `nometabela` ENGINE=InnoDB

Já para criar uma tabela já considerando essa engine basta acrescentar o código ENGINE=InnoDB ao final do comando. A código para criação tabela 'userlogins'  mostrado acima ficaria então assim:


CREATE TABLE `userlogins` (
  `LoginProvider` varchar(128) NOT NULL,
  `ProviderKey` varchar(128) NOT NULL,
  `UserId` varchar(128) NOT NULL,
  PRIMARY KEY (`LoginProvider`,`ProviderKey`,`UserId`),
  KEY `ApplicationUser_Logins` (`UserId`),
  CONSTRAINT `ApplicationUser_Logins` FOREIGN KEY (`UserId`) REFERENCES `users` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB;

Com esta diretiva a tabela será criada sem o erro. Espero ter ajudado.

Abraço!

 

Comentários

Postagens mais visitadas deste blog

Como instalar o Corel X3 no Windows 10

Vulcão no Brasil

Celulares bons e baratos para comprar em 2023 - Até R$700!