Avatar

Update des Forums (German / Deutsch)

by Auge ⌂, Friday, July 19, 2019, 07:40 (1742 days ago) @ Micha

Hallo

Zunächst habe ich das Update-Script update_2.3.5-2.4.php verwendet. Anschließend wollte ich dann mit update_2.4.19.1-2.5.php auf die Pre-Version von 2.5. Das ging schief, weil die Version bereits auf der Pre-Version nach dem ersten update stand.

Komisch, im Updateskript finde ich nichts, was das verursachen könnte. Das, zumal die Versionsnummer aus config/VERSION übernommen wird.

Folglich sind die Änderungen für den 2.5er Zweig nicht durchgeführt worden. Ich habe dann händisch alle SQLs rausgesucht und wollte die neuen/geänderten Tabellen nachziehen. Das hat bis auf eine Tabelle auch funktioniert. Beim folgendem Update gehts bei mir aber wieder schief:

ALTER TABLE `mlf2_tags` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

MySQL bricht mit folgender Meldung ab:

#1709 - Index column size too large. The maximum column size is 767 bytes.

Dass es diese Einschränkung bei der Indexgröße gibt, war mir bewusst (Abschnitt 3. unerwartete Einschränkungen). Von dort:

„Zudem beträgt die Länge eines Indexes für Tabellen vom Typ InnoDB bis MySQL 5.7 nur 768 Byte. Das entspricht nur der dreifachen Länge von varchar(256) und könnte im Zweifelsfall ein voll ausgenutztes Feld nicht im Index abbilden, wenn der Inhalt nur aus 4-bytigen UTF-8-Zeichen bestünde.“

Dass die Abfrage deshalb abgebrochen wird, ist mir bisher noch nicht begegnet. Das liegt vermutlich an der MySQL-Serverkonfiguration, denn bei mir ging die selbe Abfrage durch. Ich habe allerdings noch keine Meinung zum Umgang mit dem Problem. Lösen müssen wir es, da das Skript $irgendwo installiert werden kann und wir voraussetzen müssen, keine Kenntnis von der Konfiguration von $irgendwo zu haben. Den Index auf dem Textfeld, dass den Tag als solches enthält, brauchen wir. Ausgehend von der deutschen Sprache würde ich bezweifeln wollen, dass wir die gegenwärtige Feldlänge von 255 brauchen, aber ich habe absolut keine Ahnung, wie das in anderen Sprachen aussieht.

[edit]
Ich habe aktuell keine Möglichkeit, auf eine MySQL-Installation zuzugreifen. Ausgehend von der Indexlänge von 768 Byte beträgt die maximal abbildbare Feldlänge, wenn ich es richtig verstehe, 192 Zeichen (768/4). Es wäre also einen Versuch wert, die Feldlänge auf 192 Zeichen zu begrenzen und danach die Änderung des Charsets auszuprobieren.

ALTER TABLE mlf2_tags CHANGE tag tag VARCHAR(192) NOT NULL;
ALTER TABLE mlf2_tags CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

[/edit]

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread