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.