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

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

Al crear una nueva tabla o modificar una tabla existente con claves primarias, restricciones e índices únicos, o al definir un nuevo índice con la instrucción de manipulación Alter Table en la base de datos MySQL, puede ocurrir el siguiente error y prohibir que se complete el comando:

ERROR 1170 (42000):columna BLOB/TEXT 'field_name' utilizada en la especificación de clave sin una longitud de clave

El error ocurre porque MySQL puede indexar solo los primeros N caracteres de una columna BLOB o TEXT. Entonces, el error ocurre principalmente cuando hay un tipo de campo/columna de TEXTO o BLOB o pertenecen a tipos de TEXTO o BLOB como TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT y LONGTEXT que intenta crear como clave principal o índice. Con BLOB completo o TEXTO 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, cuando se usan los tipos BLOB o TEXT como índice, se debe proporcionar el valor de N para que MySQL pueda determinar la longitud de la clave. Sin embargo, MySQL no admite el límite de TEXTO o BLOB. TEXT(88) simplemente no funcionará.

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

La solución al problema es eliminar la columna TEXTO o BLOB del índice o restricción única, o establecer otro campo como clave principal. Si no puede hacer eso y desea colocar un límite en la columna TEXTO o BLOB, intente usar el tipo VARCHAR y coloque un límite de longitud en él. De forma predeterminada, VARCHAR está limitado a un máximo de 255 caracteres y su límite debe especificarse implícitamente dentro de un paréntesis justo después de su declaración, es decir, VARCHAR(200) lo limitará a 200 caracteres únicamente.

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