- Beiträge: 11
Sonderzeichen aus MySQL in Postgres
- Stephan
- Autor
- Offline
- Benutzer
ich habe ein Problem mit den Sonderzeichen bei der Migration aus einer MySQL in eine Postgres DB.
Sowohl auf der lesenden als auch der schriebenden Seite werden die Sonderzeichen nicht korrekt dargestellt.
Ich kann nun für jede Verbindung einen Replace Heater mit der Umsetzung der Sonderzeichen einrichten. Da es in Summe ca. 50 Felder sind, scheue ich noch die Arbeit.
Wie ist der beste Weg die Sonderzeichen-Korrektur zentral umzusetzen, d.h. im Idealfall an einer Stelle?
Danke und Gruss
Stephan
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das sollte eigentlich nicht vorkommen. Ich vermute hier stimmen die in den Datenbanken konfigurierten Zeichensätze (Codepage) nicht oder kommen die Sonderzeichen in den MySQL Feldern vor die Sie in dem anderen Thema " System.Byte[] statt Feldinhalt " beschrieben haben? Dann liegt das daran, dass der falsche Zeichensatz (Ansi bzw. UTF8) für die Umwandlung verwendet wurde. In diesem Fall bräuchte ich den Zeichensatz bzw. die Codepage wie die Daten in den Feldern abgelegt wurden, dann kann ich das Script dazu anpassen.
Zur weiteren Analyse bräuchte ich weitere Informationen:
- Können Sie mal ein Beispiel (am besten einen Screenshot) der Sonderzeichen liefern die betroffen sind bzw. sind mit Sonderzeichen Umlaute gemeint?
- Wie bzw. mit welchem Programm wurden die MySQL Daten bisher angezeigt?
- Wie bzw. mit welchem Programm werden die PostgreSQL Daten angezeigt?
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
danke für die schnelle Reaktion. Die nicht korrekte Darstellung der Sonderzeichen zieht sich durch alle Felder, nicht nur durch die diskutierten Felder mit System.Byte-Darstellung. Hier einige Beispiele:
Firmenspalte: z.B.
Kölner Stadt-Anzeiger
Journalistenbüro
Saarländischer Rundfunk
Land Baden-Württemberg
Verbände
Ãffentlichkeitsarbeit
ARD-Hörfunk
Position: z.B.
Volontär für
Regionalgeschäftsstellenleiter
Repräsentant
Experte für
Geschäftsleitung
Süd-Europa
Geschätsführer
Freitextfeld (System.Byte) nach Umsetzung durch das von Ihnen vorgeschlagene Coding im .Net-Heater: z.B.
großen Firmen
Großgeister
Onlinegroßhandel
Erschließung
Leider habe ich die Code-Page nicht und auf den Entwickler kann ich nicht zugreifen.
Kann ich die beim Lesen verwendet Code-Page ändern? Dann könnte ich das ausprobieren. Wenn ich auf die Vorschau auf der lesenden Seite gehe, sehe ich die falsch dargestellten Umlaute. Gleiches gilt für die Write-Seite.
Auf die Daten in der Postgres DB greife ich mit QlikView zu.
Falls Du noch mehr Beispiele bzw. Infos benötigst, mach ich auch gerne einen Screen-Shot.
Gruss
Stephan
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
ich habe versucht über unterschiedliche Codepages diese Sonderzeichen zu provozieren um den zugrundeliegenden Zeichensatz herauszufinden, leider ohne Erfolg.
Ich denke hier liegt ein Problem vor mit der MySQL Version 3.2 und dem verwendeten "Charset". Um das zu testen habe ich unter https://flowheater.net/files/FlowHeaterBeta.zip eine Testversion zur Verfügung gestellt. Bitte versuche das gleiche einmal mit dieser Version. Nachdem du deine Definition damit geöffnet hast trage auf der READ Seite ( MySQL Adapter ) unter den Eigenschaften für „Charset“ den Wert „auto“ ein. Ist hierdurch eine Änderung der Anzeige zu erkennen?
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
Können Sie bitte mal versuchen die Daten über phpMyAdmin oder die MySQL Workbench anzeigen zu lassen. Werden hier die Daten/Umlaute richtig angezeigt ausgegeben?
Nachdem Sie sich die Daten über eines der MySQL Administrationstools angesehen haben posten Sie bitte mal die Kollation mit der die Tabelle in der MySQL Datenbank angelegt ist. Hierzu müssen Sie sich die Struktur der Tabelle anzeigen lassen.
Ich werde den Verdacht nicht los, dass hier der Entwickler eine eigene Lösung für die Umlaute interpretiert hat.
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
ich habe folgendes gecheckt:
Über SQL Manager wird als CodePage als 1252 angegeben, kann ich auch über die Oberfläche nicht ändern. Siehe Screen Shot.
Über den SQL Manager werden die Sonderzeichen nicht korrekt angezeigt über die CRM Applikation aber schon. Im SQL Manager kann ich die UTF8 oder 1252 nicht auswählen. Von beiden habe ich Screen Shots angefügt.
Ich habe folgendes recherchiert: wenn in einer DB ein Sonderzeichen im UTF8 Format abgelegt aber über eine Oberfläche im 1252 Format abgefragt wird, kommt zur Ausgabe von 2 Zeichen, die von der Applikation als 2 Zeichen wiedergegeben werden. Siehe hierzu: http://www.perfect-knowhow.de/deutsche-umlaute-atilde-htmlentities-utf-8
Rede ich Blödsinn oder kann das die Lösung sein?
Kann ich im FlowHeater die CodePage auswählen oder wird diese durch den ODBC Treiber beim Zugriff auf die DB automatisch gezogen?
Falls ich diese wählen könnte, wärs ein einfaches das auszuprobieren.
Gruss
Stephan
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das Problem ist, dass MySQL erst ab Version 4.1 UTF8 unterstützt. Das scheint auch der Grund zu sein warum für Ihre Freitextfeld (s. System.Byte[] statt Feldinhalt ) ein VARBINARY bzw. BLOB Feld verwendet wurde. Installieren Sie bitte mal eine aktuelle MySQL Workbench (nicht den MySQL Server nur die Workbench) und rufen Sie hierüber die Daten ab. Ich gehe davon aus, dass hier ebenfalls die Umlaute falsch angezeigt werden.
Um herauszufinden welche Codepage evtl. hinter ihren Daten liegt verwenden Sie bitte mal folgendes Script.
Ziehen Sie einen .NET Script Heater in die Verbindung von Ihrem Freitextfeld und kopieren das Script hinein. Dann am besten auf der WRITE Seite lediglich dieses eine Feld exportieren. Im MySQL Configurator auf der READ Seite schränken Sie bitte noch die Datenmenge über eine WHERE Klausel ein, so dass lediglich ein Datensatz exportiert wird.
z.B. select * from IHRE-MYSQL-TABELLE where ID = 1
Der Datensatz den Sie exportieren muss im Freitextfeld Umlaute enthalten. Ausgegeben wird dann pro verfügbarer Codepage eine Zeile mit der Umwandlung. Die Ausgabe posten Sie bitte dann zur weiteren Analyse.
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
ich habe das Script ausgeführt, hier das Ergebnis:
Start
37 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
437 = Gesch+ñfts-Kontakte
500 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
708 = Gesch?¤fts-Kontakte
720 = Gesch+?fts-Kontakte
737 = Gesch+?fts-Kontakte
775 = Gesch+zfts-Kontakte
850 = Gesch+ñfts-Kontakte
852 = Gesch+Afts-Kontakte
855 = Gesch+?fts-Kontakte
857 = Gesch+ñfts-Kontakte
858 = Gesch+ñfts-Kontakte
860 = Gesch+ñfts-Kontakte
861 = Gesch+Áfts-Kontakte
862 = Gesch+ñfts-Kontakte
863 = Gesch+¨fts-Kontakte
864 = Gesch?¤fts-Kontakte
865 = Gesch+ñfts-Kontakte
866 = Gesch+?fts-Kontakte
869 = Gesch+?fts-Kontakte
870 = cÁËÄÇCuAUË .?>U/,UÁ
874 = Gesch??fts-Kontakte
875 = ?????Cu? ? .?> /, ?
932 = Gesch??fts-Kontakte
936 = Gesch?fts-Kontakte
949 = Gesch?fts-Kontakte
950 = Gesch?fts-Kontakte
1026 = åÁËÄ[CuÃÈË .?>È/,ÈÁ
1047 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1140 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1141 = åÁË[ÇCuÃÈË .?>È/,ÈÁ
1142 = }ÁËÄÇCuÃÈË .?>È/,ÈÁ
1143 = }ÁË#ÇCuÃÈË .?>È/,ÈÁ
1144 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1145 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1146 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1147 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1148 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1149 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
1200 = ??????????
1201 = ??????????
1250 = GeschA¤fts-Kontakte
1251 = Gesch?¤fts-Kontakte
1252 = Geschäfts-Kontakte
1253 = GeschG¤fts-Kontakte
1254 = Geschäfts-Kontakte
1255 = Gesch??fts-Kontakte
1256 = Gesch?¤fts-Kontakte
1257 = GeschC¤fts-Kontakte
1258 = GeschA¤fts-Kontakte
1361 = Gesch?fts-Kontakte
10000 = Geschv§fts-Kontakte
10001 = Gesch??fts-Kontakte
10002 = Gesch?fts-Kontakte
10003 = Gesch?fts-Kontakte
10004 = Gesch??fts-Kontakte
10005 = Gesch?¤fts-Kontakte
10006 = Gesch??fts-Kontakte
10007 = Geschv§fts-Kontakte
10008 = Gesch?fts-Kontakte
10010 = Geschv§fts-Kontakte
10017 = Geschv§fts-Kontakte
10021 = Gesch??fts-Kontakte
10029 = Geschv§fts-Kontakte
10079 = Geschv§fts-Kontakte
10081 = Geschv§fts-Kontakte
10082 = Geschv§fts-Kontakte
12000 = ?????
12001 = ?????
20000 = Gesch?fts-Kontakte
20001 = Gesch?fts-Kontakte
20002 = Gesch??ts-Kontakte
20003 = Gesch?fts-Kontakte
20004 = Gesch?fts-Kontakte
20005 = Gesch?fts-Kontakte
20105 = Gesch??fts-Kontakte
20106 = Gesch??fts-Kontakte
20107 = Gesch??fts-Kontakte
20108 = Gesch??fts-Kontakte
20127 = Gesch??fts-Kontakte
20261 = Gesch?fts-Kontakte
20269 = Gesch^$fts-Kontakte
20273 = åÁË[ÇCuÃÈË .?>È/,ÈÁ
20277 = }ÁËÄÇCuÃÈË .?>È/,ÈÁ
20278 = }ÁË#ÇCuÃÈË .?>È/,ÈÁ
20280 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20284 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20285 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20290 = ?dkbgC?elk .?>l/,ld
20297 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20420 = ?????Cu??? .?>?/,??
20423 = ?????Cu? ? .?> /, ?
20424 = ?????Cu? ? .?> /, ?
20833 = ?????Cu??? .?>?/,??
20838 = ?????Cu??? .?>?/,??
20866 = Gesch?+fts-Kontakte
20871 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20880 = ??¬??Cu??¬ .?>?/,??
20905 = cÁËÄ[Cu?ÈË .?>È/,ÈÁ
20924 = åÁËÄÇCuÃÈË .?>È/,ÈÁ
20932 = Gesch?fts-Kontakte
20936 = Gesch?fts-Kontakte
20949 = Gesch?fts-Kontakte
21025 = ??¬??Cu??¬ .?>?/,??
21866 = Gesch??fts-Kontakte
28591 = Geschäfts-Kontakte
28592 = GeschA¤fts-Kontakte
28593 = Gesch?¤fts-Kontakte
28594 = Geschäfts-Kontakte
28595 = Gesch??fts-Kontakte
28596 = Gesch?¤fts-Kontakte
28597 = GeschG?fts-Kontakte
28598 = Gesch?¤fts-Kontakte
28599 = Geschäfts-Kontakte
28603 = GeschC¤fts-Kontakte
28605 = GeschÃfts-Kontakte
29001 = Gesch¿ñfts-Kontakte
38598 = Gesch?¤fts-Kontakte
50220 = Gesch??fts-Kontakte
50221 = Gesch??fts-Kontakte
50222 = Gesch??fts-Kontakte
50225 = Gesch??fts-Kontakte
50227 = Gesch?fts-Kontakte
51932 = Gesch?fts-Kontakte
51936 = Gesch?fts-Kontakte
51949 = Gesch?fts-Kontakte
52936 = Gesch??fts-Kontakte
54936 = Gesch?fts-Kontakte
57002 = Gesch??fts-Kontakte
57003 = Gesch??fts-Kontakte
57004 = Gesch??fts-Kontakte
57005 = Gesch??fts-Kontakte
57006 = Gesch??fts-Kontakte
57007 = Gesch??fts-Kontakte
57008 = Gesch??fts-Kontakte
57009 = Gesch??fts-Kontakte
57010 = Gesch??fts-Kontakte
57011 = Gesch??fts-Kontakte
65000 = Geschäfts-Kontakte
65001 = Geschäfts-Kontakte
Ende
Das Ergebnis habe ich aus dem " Do Work / Definition ausführen" Fenster kopiert. So wie es aussieht hätte ich da lange probieren können .
Danke und viele Grüße
Stephan
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das ist das Problem, die Daten werden in UTF8 (mehr oder weniger, eigentlich ANSI) gespeichert. MySQL unterstützt aber erst ab Version 4.1 diesen Zeichensatz. Das Problem ist jetzt, dass diese beim Schreiben in die MySQL Datenbank vorher falsch umgewandelt werden und als Windows ANSI abgelegt sowie auch geliefert werden. Leider funktioniert in diesem Fall ein String Replace nicht, hier müssen etwas härtere Mittel her
Über folgendes Skript können Sie die Falschen MySQL Feldinhalte auslesen und richtig in UTF8 umwandeln. Sie benötigen für jedes Feld einen eigenen .NET Script Heater . Das Skript müssen Sie in jeden Heater einfügen!
Für Ihre Freitext Felder (varbinary bzw. BLOB) müssen Sie das hier beschriebene Skript verwenden. Wichtig hier die Zeile wie beschrieben in UTF8 ändern.
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
- Beiträge: 11
mittlerweile habe ich die Daten in der neuen Datenbank. Bin von FlowHeater begeistert und werde es bei künftigen Projekten sicher einsetzen.
Postgres habe ich geknickt und bin auf SQL Server gewechselt.
Viele Danke für den super Support. Ich hoffe, ich kann mich durch künftige (Kunden-)Projekte revanchieren.
Viele Grüsse
Stephan
Bitte Anmelden oder Registrieren um der Konversation beizutreten.