Hi,
es treten immer wieder Probleme bezüglich dessen auf.
Das, was mit Zugriff per PHP auf mySQL passiert, ist nicht analog mit Delphi anwendbar.
Der Server sollte im ServerCharSet UTF-8 haben und UseUnicode sollte auf TRUE stehen.
Leider werden, wenn alles korrekt verbunden ist (das betrifft den Zugriff über Delphi und den mitgelieferten Komponenten), die Felder nicht als WideStringFields hinzugefügt, sondern als Stringfield.
Leider, auch wenn die Texte korrekt in der mySQL-DB utf-8 codiert sind, geht es über Delphi mit den Standard-Komponenten nicht immer einwandfrei, sodass ich mir z.B. den Feldwert über AsString nochmal in umwandel, z.B. UTF8ToString...
dann gehts.
die tabellen liegen alle mit folgenden parametern vor:
Quelltext
1:
| COLLATION: utf8_unicode_ci |
aus der selben tabelle geht es mit PHP z.B. ohne Probleme!
Ich hab mir dazu mal einen Workaround gebastelt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TFieldHelper = class helper for TField private function GetAsString: String; public property AsString: String read GetAsString; end; ... ... function TFieldHelper.GetAsString: String; begin Result := UTF8ToString(inherited AsString); end; |
Ach ja, ich habe die DBExpress-Components benutzt. Über Ole-Treiber (mySQL, Postgres) war es noch grauenhafter... (in meiner Datenbank waren verschiedene Sprachen drin, chin. arab. bi-di re-li., li.-re.)...
Wahrscheinlich klappen sauber gekapselte Components besser... Aber ich wollte halt die flexibilität von dbExpress und die möglichkeit der tsqlconnection schnell auf unterschiedliche db-formate zu zugreifen...
gruß
rd3