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

MySQL Error 1170 (42000):BLOB/TEXT-kolonne brugt i nøglespecifikation uden en nøglelængde

Når du opretter en ny tabel eller ændrer en eksisterende tabel med primære nøgler, unikke begrænsninger og indekser, eller når du definerer et nyt indeks med Alter Table-manipulationssætning i MySQL-databasen, kan følgende fejl opstå og forhindre kommandoen i at fuldføre:

FEJL 1170 (42000):BLOB/TEXT-kolonnen 'feltnavn' brugt i 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 de tilhører TEXT eller BLOB typer såsom TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT og LONGTEXT, som du forsøger at lave som primær nøgle eller 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 begrænsning på TEXT eller BLOB. TEXT(88) virker simpelthen ikke.

Fejlen dukker også op, når du forsøger at konvertere en tabelkolonne fra non-TEXT og non-BLOB type såsom VARCHAR og ENUM til 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-kolonnen fra indekset eller den unikke begrænsning, eller at indstille et andet felt som primær nøgle. Hvis du ikke kan gøre det og ønsker at sætte en grænse på TEXT eller BLOB kolonnen, så prøv at bruge VARCHAR type og sæt en grænse for længde på den. Som standard er VARCHAR begrænset til maksimalt 255 tegn, og dens grænse skal angives implicit inden for en parentes lige efter dens erklæring, dvs. VARCHAR(200) begrænser den til kun 200 tegn.

Nogle gange, selvom du ikke bruger TEXT- eller BLOB-relateret type i din tabel, kan fejl 1170 også vises. Det sker i situationer som når du angiver VARCHAR-kolonnen som primær nøgle, men forkert indstiller dens længde eller tegnstørrelse. VARCHAR kan kun acceptere op til 256 tegn, så alt som 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-feltet.


  1. Sådan fungerer FORMAT() i MariaDB

  2. Hvordan opretter jeg et trin i mit SQL Server Agent Job, som kører min SSIS-pakke?

  3. Returnerer string array og brug det på AutoCompleteTextview

  4. SQLite - Opret et forhold