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?
Länge von Char-Feldern bei Umlauten [Erledigt]
Moderator: Moderatoren
- Klaus Schuster
- Foren-Administrator
- Beiträge: 369
- 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]
Zuletzt geändert von Klaus Schuster am Mi, 08. Apr 2020 11:14, insgesamt 1-mal geändert.
Gruß Klaus
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2517
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Länge von Char-Feldern bei Umlauten
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.
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
Gruss Carlo
- Klaus Schuster
- Foren-Administrator
- Beiträge: 369
- 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
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.
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