sql und utf-8

Alles rund um die Programmierung mit Qt
Antworten
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

sql und utf-8

Beitrag 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
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

Beitrag 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
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

Beitrag 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
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
tseucs
Beiträge: 33
Registriert: 2. August 2006 12:30

Beitrag 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();
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Mach mal

Code: Alles auswählen

show variables like 'char%'
Eventuell musst dus auch im Server anpassen, bzw. in den Tabellen/Spalten.
Antworten