AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi UTF wird beim Speichern konvertiert
Thema durchsuchen
Ansicht
Themen-Optionen

UTF wird beim Speichern konvertiert

Ein Thema von xaromz · begonnen am 6. Nov 2005 · letzter Beitrag vom 6. Nov 2005
Antwort Antwort
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#1

UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 13:12
Datenbank: MySQL • Version: 5 • Zugriff über: DBExpress
Hallo,
ich habe folgendes Problem: Wenn ich einen WideString nach UTF8 konvertiere und diesen dann in einem varchar-Feld speichere verändert mySQL meine Daten. Wenn ich z. B. das Zeichen "fi" (WideChar #64257) speichere, so ist das in UTF #239#172#129. Das Zeichen #129 erscheint im Datenbankfeld aber als #63 (Fragezeichen). Das ist wohl das Standardzeichen für unbekannte Zeichen.
Ich kann den Fehler vermeiden, wenn ich das Feld von varchar auf varbinary umstelle, aber dann kann ich keinen Index darüber erstellen.
Gibt es da noch eine andere Möglichkeit oder muss ich mich damit abfinden?

Gruß
xaromz
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 16:43
Hallo xaromz,

von der Versionsnummer her kannst du ab MySQL 4.1 Unicode verarbeiten. Hast du deine varchar Felder in der Tabelle entsprechend deklariert? Sind deine dbExpress-Komponenten überhaupt Unicode-tauglich?

Grüße vom marabu
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 17:09
Hallo,

klar hab ich die varchar-Felder als Unicode deklariert. Und weil DBExpress eben kein Unicode kann benutze ich UTF8.

Gruß
xaromz
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 17:18
UTF-8 ist Unicode - genauso wie UTF-16 und UTF-32.

marabu
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 18:54
Hallo,

UTF8 ist nicht Unicode, in UTF8 wird Unicode codiert. Deshalb ist in UTF8 auch die Acht drin, es kodiert die Mehrbyte-Zeichen in Ein-Byte-Zeichen, d. h. es kommen im codierten String nur Bytes von 1 bis 255 vor und niemals die Null, was bei Unicode passieren kann.

Gruß
xaromz
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 19:20
Interessante Sichtweise. Das Unicode Konsortium selbst ist der Meinung, dass es sich bei Unicode um ein abstraktes Konzept handelt, bei dem jedem registrierten Zeichen eine Nummer zugeordnet wird. Damit dein Programm mit Unicode arbeiten kann, bedarf es einer Repräsentation. Geläufig sind UTF-8, UTF-16 und UTF-32. Nur damit wir die gleiche Sprache sprechen. Aus dem offiziellen FAQ zum Thema:

Zitat:
Q: Can Unicode text be represented in more than one way?

A: Yes, there are several possible representations of Unicode data, including UTF-8, UTF-16 and UTF-32.
Zurück zu deinem anderen Problem. Der bei D7 und D8 mitgelieferte dbExpress beherrscht nur single byte character encodings. Wenn du ihm da aus UTF-8 resultierende illegal characters unterjubelst, gibt es Probleme. Du weißt das und wunderst dich trotzdem? Wie kann man dir da helfen?

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 19:30
Hallo,

einigen wir uns also darauf, dass UTF8 eine Repräsentation ist.

Ich übergebe DXExpress einen String, in dem Bytewerte zwischen eins und 255 vorkommen. Dies sind keine illegalen Zeichen. Mein Problem ist, dass MySQL die Zeichen interpretiert. Abhängig von der Codierung, die ich wähle, erkennt MySQL Zeichen als illegal (wie z. B. das Zeichen 129) und ersetzt diese durch ein Fragezeichen. Ich müsste also wissen, welche Codierung einzustellen ist, damit MySQL alle Bytewerte in Ruhe lässt und einfach in die Datenbank schreibt. Wie gesagt, mit Binary geht das, aber dann kann ich keinen Index mehr erstellen. Wenn ich aber in der Datenbank suche, ist das doch von Vorteil.

Gruß
xaromz
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: UTF wird beim Speichern konvertiert

  Alt 6. Nov 2005, 20:46
Ich weiß nicht wie du darauf kommst, dass MySQL deine Daten verändert. Ich habe folgendes mit MySQL 4.1.10 getestet.

SQL-Code:
CREATE TABLE test ( txt VARCHAR(10) CHARACTER SET UTF8 )

INSERT INTO test VALUES(x'efac81')

SELECT COUNT(*) FROM test WHERE txt = x'efac81'
Die Daten werden unverändert gespeichert. Vielleicht bringt es dich ja weiter auf dem Weg der Erkenntnis, ich muss jetzt ins Bettchen.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz