sql >> Databasteknik >  >> RDS >> Mysql

MySQL Error 1170 (42000):BLOB/TEXT-kolumn används i nyckelspecifikation utan nyckellängd

När du skapar en ny tabell eller ändrar en befintlig tabell med primärnycklar, unika begränsningar och index, eller när du definierar ett nytt index med Alter Table-manipulationssatsen i MySQL-databasen, kan följande fel uppstå och hindra kommandot från att slutföras:

FEL 1170 (42000):BLOB/TEXT-kolumnen "fältnamn" används i nyckelspecifikationen utan nyckellängd

Felet uppstår eftersom MySQL endast kan indexera de första N tecknen i en BLOB- eller TEXT-kolumn. Så felet inträffar främst när det finns ett fält/kolumntyp av TEXT eller BLOB eller de tillhör TEXT- eller BLOB-typer som TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT och LONGTEXT som du försöker göra som primärnyckel eller index. Med full 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 index måste värdet på N anges så att MySQL kan bestämma nyckellängden. MySQL stöder dock inte gränsen för TEXT eller BLOB. TEXT(88) fungerar helt enkelt inte.

Felet kommer också att dyka upp när du försöker konvertera en tabellkolumn från icke-TEXT och icke-BLOB-typ som VARCHAR och ENUM till TEXT- eller BLOB-typ, där kolumnen redan har definierats som unika begränsningar eller index. Kommandot Alter Table SQL kommer att misslyckas.

Lösningen på problemet är att ta bort kolumnen TEXT eller BLOB från indexet eller den unika begränsningen, 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 kolumnen TEXT eller BLOB, försök att använda VARCHAR-typ och sätt en längdgräns på den. Som standard är VARCHAR 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) kommer att begränsa den till endast 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 situationer som när du anger kolumnen VARCHAR som primärnyckel, men felaktigt ställer in 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är nyckel 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.


  1. Hur man undslipper sträng medan man matchar mönster i PostgreSQL

  2. Node.js kan inte autentisera till MySQL 8.0

  3. SQL Server 2017 Backup -2

  4. PostgreSQL-index på JSON