Fejlen opstår, fordi MySQL kun kan indeksere de første N tegn i en BLOB eller TEXT
kolonne. Så fejlen opstår hovedsageligt, når der er et felt/kolonne type TEXT
eller BLOB eller dem, der tilhører TEXT
eller BLOB
typer såsom TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
og LONGTEXT
at du forsøger at lave en primær nøgle eller et indeks. Med fuld BLOB
eller TEXT
uden længdeværdien er MySQL ikke i stand til at garantere kolonnens unikke karakter, da den er af variabel og dynamisk størrelse. Så når du bruger BLOB
eller TEXT
typer som indeks, skal værdien af N angives, så MySQL kan bestemme nøglelængden. MySQL understøtter dog ikke en nøglelængdegrænse på TEXT
eller BLOB
. TEXT(88)
virker simpelthen ikke.
Fejlen vil også dukke op, når du forsøger at konvertere en tabelkolonne fra non-TEXT
og non-BLOB
type såsom VARCHAR
og ENUM
ind i TEXT
eller BLOB
type, hvor kolonnen allerede er defineret som unikke begrænsninger eller indeks. Kommandoen Alter Table SQL mislykkes.
Løsningen på problemet er at fjerne TEXT
eller BLOB
kolonne fra indekset eller en unik begrænsning eller indstil et andet felt som primær nøgle. Hvis du ikke kan gøre det, og ønsker at sætte en grænse for TEXT
eller BLOB
kolonne, prøv at bruge VARCHAR
skriv og sæt en længdegrænse på den. Som standard er VARCHAR
er begrænset til et maksimum på 255 tegn, og dets grænse skal angives implicit inden for en parentes lige efter dens erklæring, dvs. VARCHAR(200)
begrænser det til kun 200 tegn.
Nogle gange, selvom du ikke bruger TEXT
eller BLOB
relaterede type i din tabel, kan fejl 1170 også vises. Det sker i en situation som når du angiver VARCHAR
kolonne som primær nøgle, men forkert indstillet dens længde eller tegnstørrelse. VARCHAR
kan kun acceptere op til 256 tegn, så alt som f.eks. VARCHAR(512)
vil tvinge MySQL til automatisk at konvertere VARCHAR(512)
til en SMALLTEXT
datatype, som efterfølgende fejler med fejl 1170 på nøglelængde, hvis kolonnen bruges som primær nøgle eller unikt eller ikke-unik indeks. For at løse dette problem skal du angive et tal mindre end 256 som størrelsen for VARCHAR
felt.
Reference:MySQL Error 1170 (42000):BLOB/TEXT Column Used in Key Specification Without a Key Length