Ich weiß, dass Fragen mit diesem Titel bereits beantwortet wurden, aber bitte lesen Sie weiter. Ich habe alle anderen Fragen / Antworten zu diesem Fehler vor dem Posten gründlich gelesen.
Ich erhalte den obigen Fehler für die folgende Abfrage:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
`menu_id` varchar(32) NOT NULL,
`parent_menu_id` int(32) unsigned DEFAULT NULL,
`menu_name` varchar(255) DEFAULT NULL,
`menu_link` varchar(255) DEFAULT NULL,
`plugin` varchar(255) DEFAULT NULL,
`menu_type` int(1) DEFAULT NULL,
`extend` varchar(255) DEFAULT NULL,
`new_window` int(1) DEFAULT NULL,
`rank` int(100) DEFAULT NULL,
`hide` int(1) DEFAULT NULL,
`template_id` int(32) unsigned DEFAULT NULL,
`alias` varchar(255) DEFAULT NULL,
`layout` varchar(255) DEFAULT NULL,
PRIMARY KEY (`menu_id`),
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Hat jemand eine Idee warum und wie man es behebt? Der Haken ist - dieselbe Abfrage funktioniert perfekt auf meinem lokalen Computer und auch auf meinem vorherigen Host. Übrigens stammt es aus einem ausgereiften Projekt - phpdevshell - also würde ich vermuten, dass diese Jungs wissen, was sie tun, obwohl man es nie weiß.
Jeder Hinweis geschätzt.
Ich benutze phpMyAdmin.
quelle
Dieser Fehler bedeutet, dass die Indexlänge
index
mehr als 1000 Byte beträgt. MySQL und Speicher-Engines können diese Einschränkung haben. Ich habe einen ähnlichen Fehler in MySQL 5.5 erhalten - 'Der angegebene Schlüssel war zu lang. Die maximale Schlüssellänge beträgt 3072 Byte, wenn dieses Skript ausgeführt wird:UTF8 besteht aus mehreren Bytes, und die Schlüssellänge wird auf diese Weise berechnet - 500 * 3 * 6 = 9000 Bytes.
Beachten Sie jedoch, dass die nächste Abfrage funktioniert!
... weil ich CHARSET = latin1 verwendet habe, beträgt die Schlüssellänge in diesem Fall 500 * 6 = 3000 Bytes.
quelle
Ich hatte dieses Problem und löste es wie folgt:
Referenz
quelle
Führen Sie diese Abfrage aus, bevor Sie eine Tabelle erstellen oder ändern.
SET @@global.innodb_large_prefix = 1;
Dadurch wird die maximale Schlüssellänge auf 3072 Byte festgelegt
quelle
Diese Indexgrößenbeschränkung scheint bei 64-Bit-Builds von MySQL größer zu sein.
Ich habe diese Einschränkung erreicht und versucht, unsere Entwicklungsdatenbank zu sichern und auf eine lokale VMWare-Virt zu laden. Schließlich wurde mir klar, dass der Remote-Dev-Server 64-Bit war und ich eine 32-Bit-Virt erstellt hatte. Ich habe gerade eine 64-Bit-Virt erstellt und konnte die Datenbank lokal laden.
quelle
Ich habe diesen Fehler soeben umgangen, indem ich die Werte der "Länge" in der Originaldatenbank auf insgesamt "1000" geändert habe, indem ich ihre Struktur geändert und diese dann auf den Server exportiert habe. :) :)
quelle
Ich hatte das gleiche Problem, das in der folgenden Abfrage verwendet wurde, um es zu beheben.
Beim Erstellen der Datenbank können Sie die utf-8-Codierung verwenden
z.B.
create database my_db character set utf8 collate utf8mb4;
BEARBEITEN: (unter Berücksichtigung von Vorschlägen aus Kommentaren) utf8_bin in utf8mb4 geändert
quelle
utf8
ist NICHTutf8
, es ist ein fehlerhaftes proprietäres Format, das niemals zum Tragen kommen sollte.utf8mb4
ist wahrutf8
und die empfohlene Standardeinstellung für eine ordnungsgemäßeutf8
Unterstützung.utf8mb4
ist die korrekte Codierung auf MySQL zu verwenden und nichtutf8