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.