AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit Delphi XE, MySQL und Codepage

Problem mit Delphi XE, MySQL und Codepage

Offene Frage von "k0ppki11ah"
Ein Thema von k0ppki11ah · begonnen am 7. Feb 2011 · letzter Beitrag vom 8. Feb 2011
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 10:36
Ja.
Markus Kinzler
  Mit Zitat antworten Zitat
k0ppki11ah

Registriert seit: 18. Sep 2007
21 Beiträge
 
Delphi XE Enterprise
 
#2

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 10:45
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 10:55
Ändere den Typ auf AnsiString
Markus Kinzler
  Mit Zitat antworten Zitat
k0ppki11ah

Registriert seit: 18. Sep 2007
21 Beiträge
 
Delphi XE Enterprise
 
#4

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 11:11
Welchen Typ soll ich auf AnsiString ändern?
Es handelt sich ja in diesem Fall um ein DB-Feld. Das spreche ich an über:
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:
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 11:15
Delphi-Quellcode:
s: AnsiString;
...
    s := memo1.lines.text;
    zquery1.fieldbyname('MEMO').Value := s;
Markus Kinzler
  Mit Zitat antworten Zitat
k0ppki11ah

Registriert seit: 18. Sep 2007
21 Beiträge
 
Delphi XE Enterprise
 
#6

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 7. Feb 2011, 13:24
Delphi-Quellcode:
s: AnsiString;
...
    s := memo1.lines.text;
    zquery1.fieldbyname('MEMO').Value := s;
Habe ich ausprobiert. Geht aber auch nicht.

In meinem Testprojekt werden die Daten korrekt in die DB geschrieben. Querys, die Umlaute enthalten, funktionieren aber auch nicht.
Versuche ich das gleiche in dem richtigen Projekt, kriege ich wieder den Fehler:
(SQL-Error:Incorrect string value \xf6\xf6\xf6) für den Eintrag ööö im Memo-Feld
  Mit Zitat antworten Zitat
k0ppki11ah

Registriert seit: 18. Sep 2007
21 Beiträge
 
Delphi XE Enterprise
 
#7

AW: Problem mit Delphi XE, MySQL und Codepage

  Alt 8. Feb 2011, 13:54
Fall es noch jemand interessieren sollte:
Ich habe anscheinend eine Lösung für das Problem gefunden.

In der JCL gibt es eine Unit JclStringConversions, die eine Funktion AnsiStringToUtf8() enthält.
Wenn man den komplett zusammengesetzten Query vor dem absetzen mit dieser Funktion umwandelt, funktionieren auch Abfragen, in denen Umlaute enthalten sind.
Die Funktion AnsiStrToUtf8() von Delphi hat an dieser Stelle nicht funktioniert.

Das einzige Problem, das ich bis dato festgestellt habe, tritt bei DB-Memos auf. Diese arbeiten anscheinend nicht mit dem UTF zusammen. Das lässt sich aber umgehen, in dem man ein normales TMemo-Feld verwendet, in das man die Daten per Konvertierung durch die Funktion UTF8ToAnsiString reinlädt:
memo1.lines.text := UTF8ToAnsiString(zquery1.fieldByName('MEMO').AsAnsiString); Speichern kann man das Memo dann über:
Delphi-Quellcode:
zquery1.edit;
   zquery1.fieldByName('MEMO').asAnsiString := JclStringConversions.AnsiStringToUTF8(memo1.lines.text);
zquery1.post;
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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