Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fehler 1170 (42000):BLOB/TEXT-Spalte in Schlüsselspezifikation ohne Schlüssellänge verwendet

Beim Erstellen einer neuen Tabelle oder beim Ändern einer vorhandenen Tabelle mit Primärschlüsseln, eindeutigen Einschränkungen und Indizes oder beim Definieren eines neuen Index mit der Alter Table-Manipulationsanweisung in der MySQL-Datenbank kann der folgende Fehler auftreten und die Ausführung des Befehls verhindern:

ERROR 1170 (42000):BLOB/TEXT-Spalte „Feldname“ in Schlüsselspezifikation ohne Schlüssellänge verwendet

Der Fehler tritt auf, weil MySQL nur die ersten N Zeichen einer BLOB- oder TEXT-Spalte indizieren kann. Der Fehler tritt also hauptsächlich auf, wenn es einen Feld-/Spaltentyp von TEXT oder BLOB gibt oder diese zu TEXT- oder BLOB-Typen wie TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT und LONGTEXT gehören, die Sie als Primärschlüssel oder Index verwenden möchten. Bei vollständigem BLOB oder TEXT ohne den Längenwert kann MySQL die Eindeutigkeit der Spalte nicht garantieren, da sie eine variable und dynamische Größe hat. Wenn Sie also BLOB- oder TEXT-Typen als Index verwenden, muss der Wert von N angegeben werden, damit MySQL die Schlüssellänge bestimmen kann. MySQL unterstützt jedoch kein Limit für TEXT oder BLOB. TEXT(88) funktioniert einfach nicht.

Der Fehler wird auch angezeigt, wenn Sie versuchen, eine Tabellenspalte vom Nicht-TEXT- und Nicht-BLOB-Typ wie VARCHAR und ENUM in den TEXT- oder BLOB-Typ zu konvertieren, wobei die Spalte bereits als eindeutige Einschränkungen oder Index definiert wurde. Der SQL-Befehl Alter Table schlägt fehl.

Die Lösung des Problems besteht darin, die TEXT- oder BLOB-Spalte aus dem Index oder der eindeutigen Einschränkung zu entfernen oder ein anderes Feld als Primärschlüssel festzulegen. Wenn Sie das nicht können und die TEXT- oder BLOB-Spalte begrenzen möchten, versuchen Sie, den Typ VARCHAR zu verwenden, und legen Sie eine Längenbegrenzung fest. Standardmäßig ist VARCHAR auf maximal 255 Zeichen begrenzt und sein Limit muss implizit in einer Klammer direkt nach seiner Deklaration angegeben werden, d. h. VARCHAR(200) begrenzt es auf nur 200 Zeichen lang.

Obwohl Sie in Ihrer Tabelle keinen TEXT- oder BLOB-bezogenen Typ verwenden, kann manchmal auch der Fehler 1170 angezeigt werden. Dies geschieht in Situationen, in denen Sie beispielsweise die VARCHAR-Spalte als Primärschlüssel angeben, aber ihre Länge oder Zeichengröße falsch festlegen. VARCHAR kann nur bis zu 256 Zeichen akzeptieren, daher zwingt etwas wie VARCHAR(512) MySQL dazu, VARCHAR(512) automatisch in einen SMALLTEXT-Datentyp zu konvertieren, was anschließend mit Fehler 1170 zur Schlüssellänge fehlschlägt, wenn die Spalte als primär verwendet wird Schlüssel oder eindeutiger oder nicht eindeutiger Index. Um dieses Problem zu lösen, geben Sie eine Zahl kleiner als 256 als Größe für das VARCHAR-Feld an.