sql >> Base de Datos >  >> RDS >> Mysql

Error de MySQL:especificación de clave sin longitud de clave

El error ocurre porque MySQL puede indexar solo los primeros N caracteres de un BLOB o TEXT columna. Entonces, el error ocurre principalmente cuando hay un tipo de campo/columna de TEXT o BLOB o aquellos que pertenecen a TEXT o BLOB tipos como TINYBLOB , MEDIUMBLOB , LONGBLOB , TINYTEXT , MEDIUMTEXT y LONGTEXT que intenta crear una clave principal o un índice. Con BLOB completo o TEXT sin el valor de longitud, MySQL no puede garantizar la unicidad de la columna, ya que tiene un tamaño variable y dinámico. Entonces, al usar BLOB o TEXT tipos como un índice, se debe proporcionar el valor de N para que MySQL pueda determinar la longitud de la clave. Sin embargo, MySQL no admite un límite de longitud de clave en TEXT o BLOB . TEXT(88) simplemente no funcionará.

El error también aparecerá cuando intente convertir una columna de tabla de non-TEXT y non-BLOB tipo como VARCHAR y ENUM en TEXT o BLOB type, con la columna ya definida como índice o restricciones únicas. El comando Alter Table SQL fallará.

La solución al problema es eliminar el TEXT o BLOB columna del índice o restricción única o establezca otro campo como clave principal. Si no puede hacer eso y quiere poner un límite en el TEXT o BLOB columna, intente usar VARCHAR escriba y coloque un límite de longitud en él. Por defecto, VARCHAR está limitado a un máximo de 255 caracteres y su límite debe especificarse implícitamente entre corchetes justo después de su declaración, es decir, VARCHAR(200) lo limitará a 200 caracteres solamente.

A veces, aunque no uses TEXT o BLOB tipo relacionado en su tabla, también puede aparecer el error 1170. Ocurre en una situación como cuando especifica VARCHAR columna como clave principal, pero configuró incorrectamente su longitud o tamaño de caracteres. VARCHAR solo puede aceptar hasta 256 caracteres, por lo que algo como VARCHAR(512) obligará a MySQL a convertir automáticamente el VARCHAR(512) a un SMALLTEXT tipo de datos, que posteriormente falla con el error 1170 en la longitud de la clave si la columna se usa como clave principal o índice único o no único. Para resolver este problema, especifique una cifra inferior a 256 como tamaño para VARCHAR campo.

Referencia:Error de MySQL 1170 (42000):Columna BLOB/TEXT utilizada en la especificación de clave sin una longitud de clave