MySQL-Schlüssellängenfehler während der Datenbankmigration
Beim Versuch, eine Migration mit „acts_as_taggable_on“ zu generieren, kann bei Benutzern der folgende Fehler auftreten:
<br>Mysql::Error: Specified key was too long; Die maximale Schlüssellänge beträgt 1000 Bytes<br>
Dieser Fehler weist darauf hin, dass der Index, der in der Tagging-Tabelle (index_taggings_on_taggable_id_and_taggable_type_and_context) erstellt wird, die maximale Schlüssellängenbeschränkung von 1000 Bytes überschreitet MySQL.
Ursache
Der Fehler wird durch eine Einschränkung in MySQL verursacht, insbesondere bei der Verwendung von Engines wie MyISAM oder InnoDB. Diese Engines erlegen Beschränkungen hinsichtlich des verfügbaren Speicherplatzes für die Definition von Spaltenindizes auf. Für MyISAM liegt die Grenze bei 1000 Byte, während sie für InnoDB bei 767 Byte liegt. Darüber hinaus wirkt sich der Datentyp der indizierten Spalten auf den Speicherplatzverbrauch aus, wobei VARCHAR-Spalten etwa das Dreifache der angegebenen Zeichenbeschränkung beanspruchen.
Lösung
Um dieses Problem zu beheben, Benutzer müssen einen maßgeschneiderten Index erstellen, der nur einen Teil des Datentyps der indizierten Spalte berücksichtigt. Wenn die Spalte „taggable_id“ beispielsweise den Datentyp VARCHAR(100) hat, können Benutzer Folgendes angeben:
CREATE INDEX example_idx ON taggings(taggable_id(50))
Durch die Beschränkung des Index auf die ersten 50 Zeichen der Spalte „taggable_id“ kann die Indexgröße auf reduziert werden 150 Byte, was innerhalb der zulässigen Grenze liegt. Dieser Index ist nur für Suchvorgänge wirksam, die die ersten 50 Zeichen der Spalte „taggable_id“ umfassen.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich während der MySQL-Datenbankmigration mit act_as_taggable_on die Fehlermeldung „Angegebener Schlüssel war zu lang'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!