Der Fehler tritt auf, weil MySQL nur die ersten N Zeichen eines BLOB oder TEXT
indizieren kann Säule. Der Fehler tritt also hauptsächlich auf, wenn es einen Feld-/Spaltentyp von TEXT
gibt oder BLOB oder diese gehören zu TEXT
oder BLOB
Typen wie TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
, und LONGTEXT
dass Sie versuchen, einen Primärschlüssel oder Index zu erstellen. Mit vollem BLOB
oder TEXT
Ohne den Längenwert kann MySQL die Eindeutigkeit der Spalte nicht garantieren, da sie eine variable und dynamische Größe hat. Also, wenn Sie BLOB
verwenden oder TEXT
Typen als Index, muss der Wert von N angegeben werden, damit MySQL die Schlüssellänge bestimmen kann. MySQL unterstützt jedoch keine Schlüssellängenbegrenzung für TEXT
oder BLOB
. TEXT(88)
einfach nicht funktionieren.
Der Fehler wird auch angezeigt, wenn Sie versuchen, eine Tabellenspalte von non-TEXT
zu konvertieren und non-BLOB
Typ wie VARCHAR
und ENUM
in TEXT
oder BLOB
Typ, wobei die Spalte bereits als Unique Constraints oder Index definiert wurde. Der SQL-Befehl Alter Table schlägt fehl.
Die Lösung des Problems besteht darin, den TEXT
zu entfernen oder BLOB
Spalte aus dem Index oder Unique Constraint oder legen Sie ein anderes Feld als Primärschlüssel fest. Wenn Sie das nicht können und den TEXT
einschränken möchten oder BLOB
versuchen Sie, VARCHAR
zu verwenden eingeben und eine Längenbegrenzung festlegen. Standardmäßig VARCHAR
ist auf maximal 255 Zeichen begrenzt und muss implizit in einer Klammer direkt nach seiner Deklaration angegeben werden, z. B. VARCHAR(200)
wird es auf 200 Zeichen beschränken.
Manchmal, obwohl Sie TEXT
nicht verwenden oder BLOB
verwandten Typ in Ihrer Tabelle, kann auch der Fehler 1170 erscheinen. Dies geschieht in einer Situation, in der Sie beispielsweise VARCHAR
angeben -Spalte als Primärschlüssel, aber falsche Länge oder Zeichengröße eingestellt. VARCHAR
kann nur bis zu 256 Zeichen akzeptieren, also etwas wie VARCHAR(512)
zwingt MySQL, den VARCHAR(512)
automatisch zu konvertieren zu einem SMALLTEXT
Datentyp, der anschließend mit Fehler 1170 zur Schlüssellänge fehlschlägt, wenn die Spalte als Primärschlüssel oder eindeutiger oder nicht eindeutiger Index verwendet wird. Um dieses Problem zu lösen, geben Sie als Größe für VARCHAR
eine Zahl kleiner als 256 an Feld.
Referenz:MySQL-Fehler 1170 (42000):BLOB/TEXT-Spalte in Schlüsselspezifikation ohne Schlüssellänge verwendet