Felet uppstår eftersom MySQL endast kan indexera de första N tecknen i en BLOB eller TEXT
kolumn. Så felet uppstår främst när det finns ett fält/kolumntyp av TEXT
eller BLOB eller de som tillhör TEXT
eller BLOB
typer som TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
och LONGTEXT
att du försöker skapa en primärnyckel eller index. Med fullständig BLOB
eller TEXT
Utan längdvärdet kan MySQL inte garantera att kolumnen är unik eftersom den är av variabel och dynamisk storlek. Så när du använder BLOB
eller TEXT
typer som ett index måste värdet på N anges så att MySQL kan bestämma nyckellängden. MySQL stöder dock inte en nyckellängdsbegränsning på TEXT
eller BLOB
. TEXT(88)
fungerar helt enkelt inte.
Felet dyker också upp när du försöker konvertera en tabellkolumn från non-TEXT
och non-BLOB
typ som VARCHAR
och ENUM
till TEXT
eller BLOB
typ, med kolumnen redan definierad som unika begränsningar eller index. Kommandot Alter Table SQL kommer att misslyckas.
Lösningen på problemet är att ta bort TEXT
eller BLOB
kolumn från indexet eller unik begränsning eller ange ett annat fält som primärnyckel. Om du inte kan göra det och vill sätta en gräns för TEXT
eller BLOB
kolumnen, försök att använda VARCHAR
skriv och sätt en längdgräns på den. Som standard är VARCHAR
är begränsad till högst 255 tecken och dess gräns måste anges implicit inom en parentes direkt efter dess deklaration, dvs. VARCHAR(200)
begränsar den till 200 tecken.
Ibland, även om du inte använder TEXT
eller BLOB
relaterad typ i din tabell, kan fel 1170 också visas. Det händer i en situation som när du anger VARCHAR
kolumn som primärnyckel, men felaktigt angett dess längd eller teckenstorlek. VARCHAR
kan bara acceptera upp till 256 tecken, så allt som VARCHAR(512)
kommer att tvinga MySQL att automatiskt konvertera VARCHAR(512)
till en SMALLTEXT
datatyp, som sedan misslyckas med fel 1170 på nyckellängd om kolumnen används som primärnyckel eller unikt eller icke-unikt index. För att lösa detta problem, ange en siffra mindre än 256 som storlek för VARCHAR
fältet.
Referens:MySQL-fel 1170 (42000):BLOB/TEXT-kolumn används i nyckelspecifikation utan nyckellängd