![]() |
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 |
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. |
AW: Problem mit Delphi XE, MySQL und Codepage
Delphi ab D2010 verwendet standardmässig UniCodeString, welcher UTF-16 verwendet. Einfach statt string AnsiString verwenden
|
AW: Problem mit Delphi XE, MySQL und Codepage
Ab 2009 meintest Du ;)
|
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:
Sollte ich stattdessen .fieldbyname('Feld1').asAnsiString := ____ verwenden?
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; |
AW: Problem mit Delphi XE, MySQL und Codepage
Ja.
|
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? :?: |
AW: Problem mit Delphi XE, MySQL und Codepage
Ändere den Typ auf AnsiString
|
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:
Dabei tritt der Fehler auf (SQL-Error:Incorrect string value \xf6\xf6\xf6) für den Eintrag ööö im Memo-Feld.
zquery1.fieldbyname('MEMO').asAnsiString := memo1.lines.text;
Wenn ich stattdessen so eintrage:
Delphi-Quellcode:
trägt er die Daten aus dem Memo korrekt ein.
zquery1.fieldbyname('MEMO').asAnsiString := AnsiToUtf8(memo1.lines.text);
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. |
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:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz