PRIMARY KEY (realurl,catagory)
hat eine Größe von (200 + 200) * 3 = 1.200 Bytes, was größer ist als die Grenze von 1.000 Byte, da MySQL utf8-codierte Zeichen als 3 Bytes speichert.
Sie müssen die Größe der Felder, aus denen der Primärschlüssel besteht, verringern, oder Sie können die MySQL-Version auf die neueste Version aktualisieren.
Siehe auch diese andere Frage: Fehler: Angegebener Schlüssel war zu lang; Die maximale Schlüssellänge beträgt 1000 Byte. .
Dieses häufige Problem tritt meistens auf, weil MySql standardmäßig die Zeichenbeschränkung für Spaltennamen verwendet. Was ist:
%Vor%Was wir brauchen, ist unten angegeben:
%Vor%Um dieses Problem loszuwerden, würde ich vorschlagen, utf8 während der Erstellung der Datenbank zusammen mit COLLATE set to utf8_general_ci zu verwenden. Ich bevorzuge den Befehl unten, um eine Datenbank in MariaDb oder MySql zu erstellen:
%Vor%Der obige Befehl hat mir in meinem speziellen Szenario geholfen. Ich verwende ' Sequelize ', um Tabellen zur Laufzeit zu erstellen. Als ich versuchte, meinen Code in Ubuntu auszuführen, nachdem ich die Datenbank mit dem einfachen 'CREATE DATABASE' Befehl erstellt hatte, bekam ich diesen Fehler 1071.
Wenn ich über den Befehl mit dem utf8-Zeichensatz und der Sortierfunktion lief, half mir das, den Fehler loszuwerden.
MySQL hat eine Präfix-Begrenzung von 767 Bytes in InnoDB und 1000 Bytes in MyISAM. Dies war für mich nie ein Problem, bis ich begann, UTF-16 als Zeichensatz für eine meiner Datenbanken zu verwenden. UTF-16 kann bis zu 4 Bytes pro Zeichen verwenden, dh in einer InnoDB-Tabelle dürfen keine Schlüssel länger als 191 Zeichen sein.
Ich habe dieses Problem gelöst. Erstellen Sie Ihre Datenbank mit dem folgenden Befehl.
%Vor%Sie können "Ihre Datenbank" löschen und erneut mit:
erstellen %Vor%oder ändern Sie die Konfigurationsdatei. Öffne /etc/mysql/mariadb.conf.d/50-server.cnf und ändere:
%Vor%Tags und Links mysql