Seite 1 von 1
sql und utf-8
Verfasst: 7. Januar 2009 10:45
von tseucs
Hallo,
ich habe das kleine Problemchen das meine Umlaute nicht korrekt in die Datenbank geschrieben werden. Die Quelltexte sind in UTF-8 kodiert, in der Datenbank kommt aber nur Schrott an.
Ich denke, das ich irgendwo angeben muss welche Kodierung ich verwende, aber ich habe bis jetzt nicht raus gefunden an welcher Stelle.
Und eine Antwort auf diese Frage konnte ich hier im Forum leider auch noch nicht finden.
Gruß
Torsten
Verfasst: 7. Januar 2009 10:52
von gerome69
Welche Datenbank mit welchem Treiber?
Bei MySQL mußt du zB vorher ein "SET NAMES=utf-8" absetzen.
Manche Treiber sind auch einfach nicht Unicode-Fähig.
Dann helfen dann nur solche Hacks
UPDATE ... SET textField=x0AA53b ...
Sprich, vorher diesen Binärstring erzeugen.
Gruß, Gérôme
Verfasst: 7. Januar 2009 11:42
von tseucs
Hallo,
es ist tatsächlich MySQL. Ich weiss auch wie ich über den Standard-Mysql-Treiber diese Variable setze - nur bei QT4 weiss ich es halt nicht. Wie setzt man die Variable da ein? In der Dokumentation konnte ich es leider nicht sehen.
Gruß
Torsten
Verfasst: 7. Januar 2009 13:55
von gerome69
Bei MySQL muß ein als allererstes abgesetztes Statement "SET names='utf8'" doch reichen. Das gilt solange die Verbindung steht.
Und davor und danach ein "SHOW VARIABLES", damit du siehst, ob das eine Auswirkung hat.
Wenn die Variable richtig gesetzt ist und es nicht geht, würde ich sagen, daß der Unicode-String mit dem Kommando mit den Unicodezeichen drin irgendwo intern von wchar* auf char* umgewandet wird und dann hast du keine Chance. Das Problem hatte ich mit einem PHP/MSSQL-Treiber auch mal. Da bleibt dir nur der Umweg mit dem von mir beschriebenen Hack mit den Hexwerten.
G.
Verfasst: 7. Januar 2009 14:04
von tseucs
Hallo,
vielen Dank für deine Nachricht - nur schade das du meine Frage nicht beantwortet hast:
Wie setze ich die Variablen unter QT?
Gruß
Torsten
Verfasst: 7. Januar 2009 14:41
von gerome69
tseucs hat geschrieben:
vielen Dank für deine Nachricht - nur schade das du meine Frage nicht beantwortet hast:
Wie setze ich die Variablen unter QT?
Qt braucht diese MySQL-Systemvariable nicht
Du mußt ein QSqlQuery.execute("SET NAMES='utf-8'") in der bestehenden Verbindung ausführen.
G.
Verfasst: 3. April 2009 12:36
von tseucs
So, ich hab das jetzt mal auf verschiedene Arten probiert.
Aber egal ob ich das direkt nach dem connect sende oder direkt vor dem query - die zeichen werden nicht utf-kodiert in der datenbank abgelegt.
Was ich zuletzt probiert habe ist folgender Code (nach MySQL-Handbuch der korrekte Query):
Code: Alles auswählen
opened = db.open();
QSqlQuery query("SET NAMES 'utf8'");
query.exec();
Verfasst: 3. April 2009 13:01
von pfid
Mach mal
Eventuell musst dus auch im Server anpassen, bzw. in den Tabellen/Spalten.