Wie diese Tabelle erstellen? #1071 - Specified key was too long; max key length is 1000 bytes
CREATE TABLE mini
(
realurl varchar(200) NOT NULL,
catagory varchar(200),
PRIMARY KEY (realurl,catagory),
FOREIGN KEY (realurl) REFERENCES main(realurl)
)
Fehler : `#1071 - Specified key was too long; max key length is 1000 bytes
Warum kann ich nicht diese Tabelle erstellen? Was sollte ich ändern, um diese Tabelle erstellen?
- Es hängt davon ab. Welche Art von Daten sind, die Sie zu beschreiben versuchen mit dieser Tabelle?
- möglich, Duplikat der #1071 - Specified key was too long; max key length is 767 bytes
- Siehe stackoverflow.com/a/52778785/2137210 für die Lösung
Du musst angemeldet sein, um einen Kommentar abzugeben.
PRIMARY KEY (realurl,catagory)
hat eine Größe von (200 + 200) * 3 = 1.200 in bytes, die größer ist als die 1000-byte-Grenze, wie MySQL speichert utf8 codiert chars als 3 bytes.Müssen Sie verringern Sie die Größe der Felder, die den Primärschlüssel bilden, oder Sie können ein upgrade der MySQL-version auf die neueste Version.
Auch die andere Frage: Fehler: Specified key was too long; max key length is 1000 bytes.
Dieses Allgemeine problem tritt meistens auf, weil standardmäßig verwendet MySql Zeichen-Begrenzung für Spaltennamen. Das ist:
Was wir brauchen, ist unten angegeben:
Um loszuwerden, dieses Problem, würde ich vorschlagen, utf8 verwenden, während der Erstellung von Datenbank-zusammen mit set COLLATE auf utf8_general_ci. Ich benutze lieber unter Befehl zum erstellen der Datenbank in MariaDb oder MySql:
Oben genannten Befehl hat mir geholfen, in meinem speziellen Szenario. Ich benutze " Sequelize ' zum erstellen von Tabellen zur Laufzeit. Wenn ich versuchte, meinen code in Ubuntu nach dem erstellen der Datenbank mit einfachen "CREATE DATABASE" - Befehl, ich habe diese 1071 Fehler.
Ausführen obigen Befehls mit utf8-Zeichensatz und Sortieren hat mir geholfen, loszuwerden, die Fehler.
MySQL hat ein Präfix, Einschränkung von 767 Byte bei InnoDB-und 1000 bytes in MyISAM. Dies nie ein problem für mich, bis ich anfing, mit UTF-16 als Zeichensatz für eine meiner Datenbanken. UTF-16 kann bis zu 4 Byte pro Zeichen, was bedeutet, dass in einer InnoDB-Tabelle, man kann keine Tasten mehr als 191 Zeichen.
Ich dieses Problem gelöst. Erstellen Sie Ihre Datenbank mit dem folgenden Befehl .
Können Sie drop "deine Datenbank", und erstellen Sie wieder mit:
oder ändern der config-Datei. Öffnen Sie /etc/mysql/mariadb.conf.d/50-server.cnf und ändern:
Um dies zu beheben alles, was Sie tun müssen ist, Bearbeiten Sie Ihre AppServiceProvider.php Datei-und innen das boot-Methode ein default-string Länge:
Laravel 5.4 eine änderung vorgenommen, um die Standard-Datenbank-Zeichensatz, und es ist jetzt utf8mb4 die Unterstützung für die Speicherung von emojis. Dies wirkt sich nur auf neue Anwendungen und wie lange Sie ausführen, MySQL v5.7.7 und höher, brauchen Sie nicht, etwas zu tun.
Für diejenigen unter MariaDB oder ältere Versionen von MySQL können Sie schlagen diese Fehler beim ausführen von Migrationen:
Wenn Sie sich verändert hatte
innodb_log_file_size
versuchen, wieder den vorherigen Wert.Versuchen Sie unter Einstellungen in Ihrem Mein.INI-Datei für die dauerhafte Lösung -