verwendetes Datenbanksystem: MySQL 5.7
Hallo,
ich habe in einem LONGBLOB-Feld einer Tabelle eine Datei gespeichert. In einem VARCHAR-Feld ist der Name dieser Datei gespeichert. Mit
SELECT dateiname INTO DUMPFILE dateipfad
will ich die Datei im NTFS-Filesystem des Clients speichern. Das funktioniert soweit ganz gut. Wenn aber der Dateiname Umlaute (ä,ö,ü) enthält, dann werden diese durch cryptische Zeichen im NTFS-Filesystem dargestellt. In der MySQL-Tabelle sind die Umlaute in der üblichen Form als ä, ö oder ü zu sehen.
Einstellung der Systemvariablen in der my.ini:
character-set-server=utf8
character-set-filesystem=utf8
character-set-connection=utf8
Ich habe eine Menge rumprobiert, aber keine Lösung gefunden. Hat jemand eine Idee?
Gruß, Rainer
Kannst Du bitte ein Beispiel posten, wie die Umlaute genau dargestellt werden?
Hallo hypersurf,
das sieht zum Beispiel so aus:
statt
Ergänzungen und Korrekturen in MySQL mit PHP.pdf
wird
Ergänzungen und Korrekturen in MySQL mit PHP.pdf
eingetragen.
Gruß Rainer
SELECT dateiname INTO DUMPFILE dateipfad
Hallo Rainer
Es kann sein, dass du in deinem SQL INTO Statement noch das encoding separat rein machen musst. Mit sowas wie 'CHARACTER SET UTF8'.
Gruß
Alf
Hallo Alf Ator,
vielen Dank für deinen Lösungsvorschlag. Ich werde es probieren. Die Sache wird vielleicht dadurch nicht ganz einfach, weil ich die SELECT-Anweisunf komplett als String definiere und anschließend an den MySqlDataAdapter übergebe.
Gruß Rainer
Du kannst bei MySQL das Encoding der Verbindung angeben.
Dazu einfach nach dem Aufbau der Verbindung das Encoding per Query setzen.
Siehe auch: https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html
Hallo Papst,
danke für deinen Hinweis. Wo soll ich nach erfolgreicher MySQL-Connection die SET-Anweisung für Character Set Connection geben? Ich arbeite mit MySqlDataAdapter. Dem kann ich nur eine komplette Anweisung (SELECT, UPDATE, DELETE) übergeben, aber keine SET-Anweisung. In der my.ini habe ich für den Client character-set-connection=utf8 festgelegt. Das hat aber mein Problem nicht gelöst.
Gruß, Rainer
Hallo Papst,
ich habe nach der Connection eine Query (SET character_set_connection = UTF8) abgesetzt. Hat aber leider nichts gebracht. Das Problem ist mit MySQL 5.1 nicht aufgetreten, sondern erst nach der Migration von MySQL 5.1 auf MySQL 5.7.
Trotzdem vielen Dank für deine Mühe.
Gruß Rainer
Hi,
passt denn die Collation der Datenbank und die des Feldes?
Ich habe ehrlicherweise mit .NET immer vermieden mit MySQL zu arbeiten - jedesmal, wenn ich es machen musste gab es Probleme, die es mit anderen DBMS nicht gibt.
Vielleicht kannst du mal in den Sourcen von PHP schauen, was die an die DB senden, beim Aufruf von http://php.net/manual/de/mysqli.set-charset.php
Wir geben im Connection-String immer das Attribut Unicode mit:
DbConnectionStringBuilder sb = this._DbFactory.CreateConnectionStringBuilder();
sb.Add("Unicode", true);
Wir nutzen den Provider Devart.Data.MySql: https://www.devart.com/dotconnect/mysql/docs/Devart.Data.MySqlDevart.Data.MySql.MySqlConnectionConnectionString.html
Hallo an alle, die Lösungsvorschläge gemacht haben!
Ich habe alles versucht das Problem zu lösen und dabei alle Vorschläge von euch ausprobiert. Es hat leider nichts gebracht. Ich sehe jetzt nur noch eine Lösung darin, dass ich alle Dateinamen (es geht bei mir um eine selbst geschriebene Dokument-Verwaltung), in denen Umlaute enthalten sind, die Umlaute durch jeweils 2 Buchstaben ersetze. Diese Lösung gefällt mir zwar überhaupt nicht, aber ich muss auch weiterkommen.
Nochmals vielen Dank für eure Lösungsvorschläge.
Gruß von Rainer aus Panketal (Bundesland Brandenburg)