sql >> Database teknologi >  >> RDS >> Mysql

MySQL-fejl:nøglespecifikation uden nøglelængde

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



  1. Kommaseparerede resultater i SQL

  2. Hvordan kan jeg give et alias til en tabel i Oracle?

  3. PL/SQL - Brug listevariabel i Where In-klausul

  4. Tidszonenavne med identiske egenskaber giver forskellige resultater, når de anvendes på tidsstemplet