Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Sonderzeichen aus MySQL in Postgres

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1516

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo,

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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1518

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Stephan,

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:
  1. Können Sie mal ein Beispiel (am besten einen Screenshot) der Sonderzeichen liefern die betroffen sind bzw. sind mit Sonderzeichen Umlaute gemeint?
  2. Wie bzw. mit welchem Programm wurden die MySQL Daten bisher angezeigt?
  3. Wie bzw. mit welchem Programm werden die PostgreSQL Daten angezeigt?
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1519

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo,

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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1520

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Stephan,

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

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 10 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1522

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark,

Ihre Beta-Version löst das Problem noch nicht.

Ich habe einen Screen Shot mit den Ergebnissen und den Einstellungen angehängt...



Gruss

Stephan
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1523

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Stephan,

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

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1533

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark,

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: www.perfect-knowhow.de/deutsche-umlaute-...e-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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1535

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Stephan,

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.
public object DoWork()
{
  int count = InValues.Length;
  if (count != 1)
    throw new ArgumentException("Es wird ein Eingangsparameter erwartet!");

  object o = InValues[0].GetValue();

  if (o != null && o is byte[])
  {
    string sRet = "Start" + System.Environment.NewLine;

    foreach(EncodingInfo ei in Encoding.GetEncodings())
    {
      sRet += ei.CodePage.ToString("0") + "\t = ";
      sRet += Encoding.GetEncoding(ei.CodePage).GetString((byte[])o);
      sRet += System.Environment.NewLine;
    }

    return sRet + System.Environment.NewLine + "Ende";
  }

  return "keine Daten vorhanden!";
}

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

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 2 Wochen her #1538

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo,

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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 1 Woche her #1539

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Stephan,

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!

public object DoWork()
{
  int count = InValues.Length;
  if (count != 1)
    throw new ArgumentException("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string sIN = (string)InValues[0].GetString();

  // Bytes extrahieren, MySQL tut hier so als ob das Windows ANSI wäre!
  byte[] b = Encoding.GetEncoding(1252).GetBytes(sIN);

  // Bytes richtig in UTF8 umwandeln
  return Encoding.GetEncoding(65001).GetString(b);
}

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

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 3 Jahre 1 Woche her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 1 Woche her #1540

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo,

die Ausführung des Scripts in den Feldern Vorname und Nachname ist sauber durchgelaufen. In den Feldern Qualifikation und Briefanrede bricht das Script mit folgenderFehlermeldung ab:



Was mache ich falsch oder wo liegt der Fehler?

Gruss

Stephan
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 3 Jahre 1 Woche her #1541

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Ich denke das liegt daran, dass hier diese Felder teilweise den Wert NULL haben? Ich habe das Skript leicht modifiziert, so sollte das auch mit diesen Feldern klappen.

public object DoWork()
{
  int count = InValues.Length;
  if (count != 1)
    throw new ArgumentException("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string sIN = (string)InValues[0].GetString();
  if (sIN == null)
    return null;

  // Bytes extrahieren, MySQL tut hier so als ob das Windows ANSI wäre!
  byte[] b = Encoding.GetEncoding(1252).GetBytes(sIN);

  // Bytes richtig in UTF8 umwandeln
  return Encoding.GetEncoding(65001).GetString(b);
}
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Sonderzeichen aus MySQL in Postgres 2 Jahre 11 Monate her #1544

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo,

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
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.106 Sekunden