Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem mit Delphi XE, MySQL und Codepage (https://www.delphipraxis.net/158135-problem-mit-delphi-xe-mysql-und-codepage.html)

k0ppki11ah 7. Feb 2011 10:24

Datenbank: MySQL • Version: 5.1 • Zugriff über: Zeos 7.0.0

Problem mit Delphi XE, MySQL und Codepage
 
Hallo Community,

ich habe ein riesen Problem mit dem Zugriff auf MySQL aus Delphi XE heraus.
Die Anbindung erfolgt über ZEOS 7.0.0 (aus SVN geladen).

Vorher haben ich mit Delphi 6 und einer älteren ZEOS-Version auf die MySQL DB zugegriffen. Als Codepage wurde latin1_german1_ci verwendet.

Seit der Portierung der Projekte auf Delphi XE treten nun Umlautfehler auf.

Anscheinend arbeitet Delphi XE mit UTF8. Dementsprechend habe ich versucht, die Datenbank auch auf UTF8 umzustellen.
Sowohl in der DB selber, als auch in den verwendeten Tabellen, sowie bei der ZEOS-Connection selber (ZConnection1.parameters.add(codepage=utf8)

Ich bekomme es in manchen Konstellationen hin, Umlaute richtig in die DB zu schreiben. Jedoch bei Querys, in denen Umlaute vorkommen gibt es Probleme wenn man die Parameter nicht vorher mit AnsiToUtf8() formatiert.

Beim Schreiben von Daten in ein Mediumtext-Feld hagelt es Fehlermeldungen.

Gibt es keine Möglichkeit, aus Delphi XE heraus auf die MySQL-DB mit Codepage latin1_german1_ci zuzugreifen? Die betreffenden Anwendungen müssen kein Unicode beherrschen. Wichtig ist lediglich die Darstellung von Umlauten und Sonderzeichen wie ß, Ø, ², ³...

Ich hoffe Ihr könnt mit meiner Situationsbeschreibung etwas anfangen und habt auch einen Lösungsansatz dafür. :wink:

Vielen Dank im voraus.

Mfg Olli

Bernhard Geyer 7. Feb 2011 10:26

AW: Problem mit Delphi XE, MySQL und Codepage
 
Wieso verwendest du keine parametrisierten Abfragen/Inserts?
I.d.R. verschwinden viele Probleme mit Sonderzeichen bei verwendung von Parametern.

mkinzler 7. Feb 2011 10:28

AW: Problem mit Delphi XE, MySQL und Codepage
 
Delphi ab D2010 verwendet standardmässig UniCodeString, welcher UTF-16 verwendet. Einfach statt string AnsiString verwenden

DeddyH 7. Feb 2011 10:32

AW: Problem mit Delphi XE, MySQL und Codepage
 
Ab 2009 meintest Du ;)

k0ppki11ah 7. Feb 2011 10:36

AW: Problem mit Delphi XE, MySQL und Codepage
 
Danke für die schnelle Antworten.

Das mit den parametrisierten Abfragen wollte ich demnächst der Ordnung halber auch noch angehen.

Momentan trage ich Daten folgendermassen ein:
Delphi-Quellcode:
zquery1.sql.text := 'SELECT * FROM tabelle WHERE ID is null';
zquery1.open;
zquery1.append;
   zquery1.fieldbyname('Feld1').asString := 'TEST';
   zquery1.fieldbyname('Feld2').asFloat := 123.45;
   zquery1.fieldbyname('Feld3').asDateTime := now;
zquery1.post;
Sollte ich stattdessen .fieldbyname('Feld1').asAnsiString := ____ verwenden?

mkinzler 7. Feb 2011 10:36

AW: Problem mit Delphi XE, MySQL und Codepage
 
Ja.

k0ppki11ah 7. Feb 2011 10:45

AW: Problem mit Delphi XE, MySQL und Codepage
 
Das mit dem AsAnsiString hab ich in meinem Testprojekt direkt mal versucht.

Funktioniert aber nicht. Er trägt mir für Umlaute immer noch kryptische Zeichen ein.

Momentan steht die Collation der DB auf latin1_german1_ci, in der ZEOS-Connection wird Client_Encoding=latin1 verwendet.

Liegt es denn nun daran, das Delphi UTF8 verwendet, oder eher daran, dass ZEOS die Daten an den MySQL Server im UTF8 Format schickt? :?:

mkinzler 7. Feb 2011 10:55

AW: Problem mit Delphi XE, MySQL und Codepage
 
Ändere den Typ auf AnsiString

k0ppki11ah 7. Feb 2011 11:11

AW: Problem mit Delphi XE, MySQL und Codepage
 
Welchen Typ soll ich auf AnsiString ändern?
Es handelt sich ja in diesem Fall um ein DB-Feld. Das spreche ich an über:
Delphi-Quellcode:
zquery1.fieldbyname('MEMO').asAnsiString := memo1.lines.text;
Dabei tritt der Fehler auf (SQL-Error:Incorrect string value \xf6\xf6\xf6) für den Eintrag ööö im Memo-Feld.

Wenn ich stattdessen so eintrage:
Delphi-Quellcode:
zquery1.fieldbyname('MEMO').asAnsiString := AnsiToUtf8(memo1.lines.text);
trägt er die Daten aus dem Memo korrekt ein.

Wenn ich die ZEOS-Connection auf codepage=utf8 einstelle und die Tabelle auf utf_general_ci trägt der die Daten korrekt in die Tabelle ein.

Wenn ich mir die Daten in einem Grid anzeigen lasse, habe ich wieder kryptische Zeichen anstatt der Umlaute. Querys, die Umlaute im WHERE enthalten, haben kein Ergebnis (aus Delphi abgesetzt), über den MySQL QueryBrowser abgesetzt funktionieren sie aber.

mkinzler 7. Feb 2011 11:15

AW: Problem mit Delphi XE, MySQL und Codepage
 
Delphi-Quellcode:
s: AnsiString;
...
    s := memo1.lines.text;
    zquery1.fieldbyname('MEMO').Value := s;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz