QSqlRelationalTableModel + MAC + Umlaute

Alles rund um die Programmierung mit Qt
Antworten
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

QSqlRelationalTableModel + MAC + Umlaute

Beitrag von pfid »

Hallo,

ich nutze in meiner Applikation ein QSqlRelationalTableModel zusammen mit einer QTableView. Das Editieren erfolgt direkt über die TableView. Gespeichert wird manuell über einen Button, mit submitAll(). So weit funktioniert das alles.

Nun hab ich den speziellen Fall auf dem MAC, dass Umlaute nicht mitgespeichert werden. Wenn ich in der Tabelle ein Feld mit dem Wert "aaaökkkkk" fülle, und auf speichern drücke, wird nur "aaa" gespeichert. Das Problem besteht unter Linux und Windows nicht.

Die MySQL Datenbank ist auf UTF-8 gestellt, und direkt nach dem öffnen der Datenbankverbindungen im Code führe ich dies aus:

Code: Alles auswählen

   QSqlQuery qEncoding("SET NAMES 'utf8';");
   qEncoding.exec();
Damit wird clientseitig das MySQL Encoding auf UTF-8 gestellt. Ebenfalls befinden sich diese beiden Zeilen im Code:

Code: Alles auswählen

   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); 
   QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); 
Trotzdem funktionieren die Umlaute nicht.

Bei einem anderen Element meiner Applikation wird ein Text aus einem QTextEdit Objekt in die MySQL Datenbank geschrieben. Dort hatte ich das gleiche Problem mit den Umlauten, und auch nur auf dem MAC, nicht unter Linux oder Windows. Dort konnte ich das umgehen, indem ich der Sql Query nicht textEdit->toHtml() übergeben habe, sondern textEdit->toHtml().toUft8(). Dies kann ich im o. g. Fall mit der Tabelle nicht, da ich nicht auf die QStrings der einzelnen Felder zugreife, sondern das Model nur per submitAll() speichere.

Hat jemand eine Idee was da helfen könnte?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Falls du mysql version 5 > hast musst du nicht

QSqlQuery qEncoding("SET NAMES 'utf8';");

verwenden sowie beim abspeichern geht alles automatisch durch den treiber... er erkennt alles was es ist...
nur richtig die Collation setzen in den table struct

weniger als version 5 ist nicht professionell...
.........................
speack português italiano deutsch english castellà qt
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Wenn ich aus dem Programm heraus ein "show variables;" absetze bekomm ich folgendes:

Code: Alles auswählen

mysql> show variables;
+---------------------------------+--------------------------------------------------------------+
| Variable_name                   | Value                                                        |
+---------------------------------+--------------------------------------------------------------+
| character_set_client            | utf8                                                       | 
| character_set_connection        | utf8                                                         | 
| character_set_database          | utf8                                                         | 
| character_set_filesystem        | binary                                                       | 
| character_set_results           | utf8                                                       | 
| character_set_server            | utf8                                                         | 
| character_set_system            | utf8                                                         | 
| collation_connection            | utf8_general_ci                                              | 
| collation_database              | utf8_general_ci                                              | 
| collation_server                | utf8_general_ci                                              | 
Versteh nicht wieso es nicht geht. Es läuft ja auch Windows+Linux, nur nicht mit dem Mac. :?:
Mysql version ist 5.x.x
Antworten