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

MySQL-Fehler:Schlüsselangabe ohne Schlüssellänge

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