Hallo Rolf,
entschuldige bitte. Es wäre noch wichtig gewesen, zu erwähnen, dass das Problem nicht bei der Speicherung in der DB auftritt, sondern schon vorher, bei der Verarbeitung der Daten. Im Gegenteil, in die DB wird im letzten Schritt sogar alles korrekt eingetragen.
Bei der Verarbeitung der CSV-Daten untersuche ich diese unter anderem mit similar_text(), um darauf basierend weitere Werte in die DB einzutragen. Durch die starke Abweichung bei Umlauten bekomme ich jetzt Ergebnisse, die nicht mehr passen.
Ich versuche das mal zu ordnen. Das Verhalten ist so verwirrend, dass ich selbst immer wieder durcheinander komme.
- Abfrage DB-Daten => Speicherung in Array_1 (Umlaute korrekt)
- Einlesen CSV-Daten => Speicherung in Array_2 (Umlaute korrekt)
- Quervergleich zwischen DB-Daten und CSV-Daten (Umlaute in Array_1 fehlerhaft)
- Speicherung CSV-Daten und Ergebnis aus 3. in DB (Umlaute korrekt)
Ab hier wirds komplett verrückt. Sobald ich die CSV-Daten ohne utf8-encode() im Array_2 speichere, werden in var_dump(Array_1) die Umlaute falsch dargestellt, mit utf8-encode() erscheinen sie korrekt. Aber dieses var_dump wird eigentlich gleich zum Anfang ausgeführt. Ich frage mich, warum die viel spätere Speicherung der Daten in Array_2 Einfluss auf die Darstellung von Array_1 hat, und warum die überhaupt beeinflusst wird.
Und es wird nochmal verrückter. Wenn ich die Werte in Array_2 mit utf8-encode() speichere, wird wie gesagt Array_1 korrekt angezeigt. Wenn ich dann aber die Werte aus Array_2 mit echo probeweise ausgebe, werden die Umlaute in Array_1 plötzlich wieder falsch dargestellt. Nur wenn ich das echo mit utf8_decode() ausgebe, bleibt das Array_1 korrekt. Dann wird aber natürlich das echo selbst mit fehlerhaften Umlauten angezeigt 🤪
Ich bin hier irgendwie in eine utf8_encode/decode-Hölle hineingeraten. Vermutlich kann mir hier auch niemand helfen, ohne direkten Blick auf den Code. Und selbst dann... Naja, wenn ich eine Lösung gefunden habe, werde ich es euch wissen lassen.
... du kannst mittels mysqli_get_charset() abfragen, was verwendet wird.
Achja, das hat ["charset"]=> string(4) "utf8" ergeben. Das scheint also korrekt zu sein.
Schöne Grüße
Nico