sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fel:nyckelspecifikation utan nyckellängd

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



  1. Hur man tar bort dubbletter av rader utan unik identifierare

  2. MySQL's now() +1 dag

  3. Spring Boot Query-anteckning med nativeQuery fungerar inte i Postgresql

  4. PostgreSQL 9.1:Hur man sammanfogar rader i array utan dubbletter, GÅ MED i en annan tabell