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

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

Ao criar uma nova tabela ou alterar uma tabela existente com chaves primárias, restrições exclusivas e índices, ou ao definir um novo índice com a instrução de manipulação Alter Table no banco de dados MySQL, pode ocorrer o seguinte erro e proibir a conclusão do comando:

ERRO 1170 (42000):coluna BLOB/TEXT ‘field_name’ usada na especificação de chave sem um comprimento de chave

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

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

A solução para o problema é remover a coluna TEXT ou BLOB do índice ou restrição exclusiva, ou definir outro campo como chave primária. Se você não puder fazer isso e quiser colocar um limite na coluna TEXT ou BLOB, tente usar o tipo VARCHAR e coloque um limite de comprimento nela. 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) o limitará a apenas 200 caracteres.

Às vezes, mesmo que você não use o tipo relacionado TEXT ou BLOB em sua tabela, o erro 1170 também pode aparecer. Isso acontece em situações como quando você especifica a coluna VARCHAR como chave primária, mas configura 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 tipo de dados SMALLTEXT, que posteriormente falhará com o erro 1170 no comprimento da chave se a coluna for usada como primária chave ou índice exclusivo ou não exclusivo. Para resolver este problema, especifique um valor menor que 256 como tamanho para o campo VARCHAR.