Danke für den Hinweis, dieses Problem liegt an der Repräsentation eines Datenwertes als serialisierte Zeichenkette und der kürzlichen Umstellung der Zeichenkodierung von ISO 8859-1 zu UTF-8.
Das Problem wird gerade dann auftreten, wenn man für Private Nachrichten einen speziellen Ordner verwendet oder verwendet hatte, da hier eine serialisierte Zeichenkette zur Speicherung der Ordner genutzt wird.
Ich bin gerade dabei dies zu beheben und melde mich nochmal, sobald dies abgeschlossen ist.
Um das Problem etwas genauer zu beleuchten:
Möche man den Array
PHP:
array('männlich', 'weiblich');
als serialisierte Zeichenkette darstellen, so ist der vermeintlich erwartete (und unter ISO 8859-1 immer zutreffende) Wert:
PHP:
a:2:{i:0;s:8:"männlich";i:1;s:8:"weiblich";}
Diese Darstellung lässt sich dann wie folgt lesen:
- "a:2:" Es handelt sich mit einen Array mit zwei Einträgen
- "{" Beginn des Inhaltes des Array
- "i:0;" Der folgende Wert trägt den Index 0 (es ist sozusagen der erste Wert)
- "s:8:"männlich";" Es handelt sich bei dem Wert um einen String der Länge 8 mit dem Inhalt "männlich"
- "i:0;" Der folgende Wert trägt den Index 1 (es ist sozusagen der zweite Wert)
- "s:8:"weiblich";" Es handelt sich bei dem Wert um einen String der Länge 8 mit dem Inhalt "weiblich"
- "}" Ende des Inhaltes des Array
Verwendet man nun jedoch UTF-8, so ergibt sich folgende Darstellung:
PHP:
a:2:{i:0;s:9:"männlich";i:1;s:8:"weiblich";}
Wie man sieht ist hier der Unterschied das "s:9:" vor dem Wert "männlich". Obwohl es sich zwar um 8 Buchstaben handelt, werden jedoch 2 Bytes für das "ä" in UTF-8 benötigt, weshalb die Länge in Bytes in diesem Beispiel 9 ist.
Da die zugrundeliegende Zeichenkodierung jedoch in der serialisierte Zeichenkette wie man sieht nicht aufgelistet wird, jedoch einen wesentlichen Einfluss auf die Längen der Inhalte hat, lässt sich dieses Problem ohne eine Neugenerierung der serialisierte Zeichenkette leider nicht beheben.
Diese Konvertierung müssen wir jedoch von Hand erledigen, da dies eine äußerst untriviale Aufgabe ist, welche sich nur schwer durch ein Skript erledigen lässt, bzw. der Aufwand ein Skript zu entwerfen, welches sicher vor möglicher Datenkorruption ist, deutlich höher liegt, als die manuelle Anpassung, da letztlich auch eher selten eine serialisierte Zeichenkette zur Speicherung von Daten genutzt wird, da man damit auch den einfachen relationalen Bezug innerhalb der Datenbank verliert.