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

Erro do MySQL:especificação de chave sem comprimento de chave


O erro acontece porque o MySQL pode indexar apenas os primeiros N caracteres de um BLOB ou TEXT coluna. Portanto, o erro ocorre principalmente quando há um tipo de campo/coluna de TEXT ou BLOB ou aqueles que pertencem a TEXT ou BLOB tipos como TINYBLOB , MEDIUMBLOB , LONGBLOB , TINYTEXT , MEDIUMTEXT e LONGTEXT que você tenta fazer uma chave primária ou índice. Com BLOB completo ou TEXT sem o valor de comprimento, o MySQL não pode garantir a exclusividade da coluna, pois é de tamanho variável e dinâmico. Então, ao usar BLOB ou TEXT tipos como um índice, o valor de N deve ser fornecido para que o MySQL possa determinar o comprimento da chave. No entanto, o MySQL não suporta um limite de tamanho de chave em TEXT ou BLOB . TEXT(88) simplesmente não funcionará.

O erro também aparecerá quando você tentar converter uma coluna da tabela de non-TEXT e non-BLOB tipo como VARCHAR e ENUM em TEXT ou BLOB tipo, com a coluna já definida como restrição ou índice exclusivo. O comando Alter Table SQL falhará.

A solução para o problema é remover o TEXT ou BLOB coluna do índice ou restrição exclusiva ou defina outro campo como chave primária. Se você não puder fazer isso e quiser colocar um limite no TEXT ou BLOB coluna, tente usar VARCHAR digite e coloque um limite de comprimento nele. Por padrão, VARCHAR é limitado a um máximo de 255 caracteres e seu limite deve ser especificado implicitamente dentro de um colchete logo após sua declaração, ou seja, VARCHAR(200) irá limitá-lo a apenas 200 caracteres.

Às vezes, mesmo que você não use TEXT ou BLOB tipo relacionado em sua tabela, o erro 1170 também pode aparecer. Isso acontece em uma situação como quando você especifica VARCHAR coluna como chave primária, mas configurou incorretamente seu comprimento ou tamanho de caracteres. VARCHAR só pode aceitar até 256 caracteres, então qualquer coisa como VARCHAR(512) forçará o MySQL a converter automaticamente o VARCHAR(512) para um SMALLTEXT tipo de dados, que posteriormente falha com erro 1170 no comprimento da chave se a coluna for usada como chave primária ou índice exclusivo ou não exclusivo. Para resolver este problema, especifique um valor menor que 256 como tamanho para VARCHAR campo.

Referência:Erro MySQL 1170 (42000):Coluna BLOB/TEXT usada na especificação de chave sem um comprimento de chave