Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro MySQL #1071 - A chave especificada era muito longa; comprimento máximo da chave é 767 bytes


767 bytes no MySQL versão 5.6 (e versões anteriores), é a limitação de prefixo declarado para tabelas InnoDB. Tem 1.000 bytes para tabelas MyISAM. Este limite foi aumentado para 3072 bytes No MySQL versão 5.7 (e para cima).

Você também deve estar ciente de que, se você definir um índice em um caractere grande ou varchar campo que é utf8mb4 codificado, você deve dividir o comprimento máximo do prefixo do índice de 767 bytes (ou 3072 bytes) por 4, resultando em 191 . Isso ocorre porque o comprimento máximo de um utf8mb4 caractere é de quatro bytes. Para um utf8 caractere seriam três bytes, resultando no comprimento máximo do prefixo do índice de 255 (ou menos null-terminator, 254 caracteres).

Uma opção que você tem é apenas colocar um limite inferior em seu VARCHAR Campos.

Outra opção (de acordo com a resposta a este problema ) é obter o subconjunto da coluna em vez do valor total, ou seja:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Ajuste conforme você precisa obter a chave para aplicar, mas me pergunto se valeria a pena revisar seu modelo de dados em relação a essa entidade para ver se há melhorias possíveis, o que permitiria implementar as regras de negócios pretendidas sem atingir a limitação do MySQL .