Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur MySQL 1170 (42000) :colonne BLOB/TEXT utilisée dans la spécification de clé sans longueur de clé

Lors de la création d'une nouvelle table ou de la modification d'une table existante avec des clés primaires, des contraintes uniques et des index, ou lors de la définition d'un nouvel index avec l'instruction de manipulation Alter Table dans la base de données MySQL, l'erreur suivante peut se produire et empêcher la commande de se terminer :

ERREUR 1170 (42000) :Colonne BLOB/TEXT "nom_champ" utilisée dans la spécification de la clé sans longueur de clé

L'erreur se produit car MySQL ne peut indexer que les N premiers caractères d'une colonne BLOB ou TEXT. Ainsi, l'erreur se produit principalement lorsqu'il y a un type de champ/colonne de TEXT ou BLOB ou ceux qui appartiennent à des types TEXT ou BLOB tels que TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT et LONGTEXT que vous essayez de faire comme clé primaire ou index. Avec un BLOB ou un TEXT complet sans la valeur de longueur, MySQL n'est pas en mesure de garantir l'unicité de la colonne car elle est de taille variable et dynamique. Ainsi, lors de l'utilisation de types BLOB ou TEXT comme index, la valeur de N doit être fournie afin que MySQL puisse déterminer la longueur de la clé. Cependant, MySQL ne prend pas en charge la limite sur TEXT ou BLOB. TEXT(88) ne fonctionnera tout simplement pas.

L'erreur apparaîtra également lorsque vous essayez de convertir une colonne de table de type non-TEXT et non-BLOB tel que VARCHAR et ENUM en type TEXT ou BLOB, la colonne ayant déjà été définie comme contrainte ou index unique. La commande Alter Table SQL échouera.

La solution au problème consiste à supprimer la colonne TEXT ou BLOB de l'index ou de la contrainte d'unicité, ou à définir un autre champ comme clé primaire. Si vous ne pouvez pas le faire et que vous souhaitez limiter la colonne TEXT ou BLOB, essayez d'utiliser le type VARCHAR et placez-y une limite de longueur. Par défaut, VARCHAR est limité à un maximum de 255 caractères et sa limite doit être spécifiée implicitement entre crochets juste après sa déclaration, c'est-à-dire que VARCHAR(200) le limitera à 200 caractères uniquement.

Parfois, même si vous n'utilisez pas de type lié à TEXT ou BLOB dans votre table, l'erreur 1170 peut également apparaître. Cela se produit dans des situations telles que lorsque vous spécifiez la colonne VARCHAR comme clé primaire, mais définissez à tort sa longueur ou sa taille de caractères. VARCHAR ne peut accepter que jusqu'à 256 caractères, donc quelque chose comme VARCHAR(512) forcera MySQL à convertir automatiquement le VARCHAR(512) en un type de données SMALLTEXT, qui échouera ensuite avec l'erreur 1170 sur la longueur de la clé si la colonne est utilisée comme primaire clé ou index unique ou non unique. Pour résoudre ce problème, spécifiez un chiffre inférieur à 256 comme taille du champ VARCHAR.