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

Erreur MySQL :spécification de clé sans longueur de clé

L'erreur se produit car MySQL ne peut indexer que les N premiers caractères d'un BLOB ou TEXT colonne. Donc, l'erreur se produit principalement lorsqu'il y a un type de champ/colonne de TEXT ou BLOB ou ceux appartenant à TEXT ou BLOB types tels que TINYBLOB , MEDIUMBLOB , LONGBLOB , TINYTEXT , MEDIUMTEXT , et LONGTEXT que vous essayez de créer une clé primaire ou un index. Avec BLOB complet ou TEXT sans la valeur de longueur, MySQL est incapable de garantir l'unicité de la colonne car elle est de taille variable et dynamique. Ainsi, lors de l'utilisation de BLOB ou TEXT types en tant qu'index, la valeur de N doit être fournie pour que MySQL puisse déterminer la longueur de la clé. Cependant, MySQL ne prend pas en charge une limite de longueur de clé 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 à partir de non-TEXT et non-BLOB type tel que VARCHAR et ENUM en TEXT ou BLOB type, avec la colonne déjà définie en tant que contraintes uniques ou index. La commande Alter Table SQL échouera.

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

Parfois, même si vous n'utilisez pas TEXT ou BLOB type connexe dans votre table, l'erreur 1170 peut également apparaître. Cela se produit dans une situation telle que lorsque vous spécifiez VARCHAR colonne comme clé primaire, mais a mal défini 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) à un SMALLTEXT type de données, qui échoue ensuite avec l'erreur 1170 sur la longueur de la clé si la colonne est utilisée comme clé primaire ou index unique ou non unique. Pour résoudre ce problème, spécifiez un chiffre inférieur à 256 comme taille pour VARCHAR champ.

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