Länge von Char-Feldern bei Umlauten [Erledigt]

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Länge von Char-Feldern bei Umlauten [Erledigt]

Beitrag von Klaus Schuster »

Hallo Leute,

beim Versuch Daten aus einer Dbf mit einem Zeichenfeld der Länge 4 In eine korrespondierendes Char(4) Feld einer SQL-Tabelle via INSERT zu übertragen, kommt es zu einem Fehler wenn im Feld der DBF ein Text mit Umlaut (zB. 'Tüte') steht. 'Tüte' sei zu lang für Char(4). Ich kann es mir so erklären, das bei der Umwandlung in UTF-8 möglicherweise U+00FC gespeichert wird. Wie geht ihr damit um?
Zuletzt geändert von Klaus Schuster am Mi, 08. Apr 2020 11:14, insgesamt 1-mal geändert.
Gruß Klaus
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Länge von Char-Feldern bei Umlauten

Beitrag von ramses »

Hallo Klaus

die Datenbank mit dem Zeichensatz "Latin-1" nicht UTF-8 erstellen. Weil "Tüte" benötigt unter UTF-8 ein 5 Zeichen Datenfeld.

Leider können die xbase++ Funktionen wie len() substr() usw. mit mit UTF-8 umgehen, mit UTF-8 zu arbeiten ist eine Herausforderung.....

Ich fand es dann einfacher intern mit Latin-1 zu arbeiten und Ein/Ausgaben an den Client jeweils zu konvertieren.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Länge von Char-Feldern bei Umlauten

Beitrag von Klaus Schuster »

Hallo Carlo,

Danke für Deine Antwort. Auf UTF-8 möchte ich nicht verzichten (Shopanbindung). Nach ein paar Experimenten bin ich auf die Ursache gestossen: DacSqlStatement() konvertiert anscheinend jeden Text auf Basis der Einstellungen in Set( _SET_CHARSET, CHARSET_ANSI ) selbstständig nach UTF-8. Da ich den Text vorher bereits fleissig in UTF-8 konvertiert hatte, wurde 'ü' als 'ü' von DacSqlStatement() unverändert an die Datenbank weitergereicht. Somit wurde aus einem Zeichen zwei.
Gruß Klaus
Antworten