Entwickler-Ecke

Datenbanken - widememo in MySQL deklarieren


Fienix - Mo 30.08.10 08:18
Titel: widememo in MySQL deklarieren
Hallo,

wer weiss wie man ein WideMemo Field in MySQL 5 deklariert.

Das benötige ich für UTF8 in Delphi 2010.


Delete - Di 14.09.10 14:48

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;  // nur ReadOnly!!
  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