![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: DBExpress
UTF wird beim Speichern konvertiert
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 |
Re: UTF wird beim Speichern konvertiert
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 |
Re: UTF wird beim Speichern konvertiert
Hallo,
klar hab ich die varchar-Felder als Unicode deklariert. Und weil DBExpress eben kein Unicode kann benutze ich UTF8. Gruß xaromz |
Re: UTF wird beim Speichern konvertiert
UTF-8 ist Unicode - genauso wie UTF-16 und UTF-32.
marabu |
Re: UTF wird beim Speichern konvertiert
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 |
Re: UTF wird beim Speichern konvertiert
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:
Freundliche Grüße vom marabu |
Re: UTF wird beim Speichern konvertiert
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 |
Re: UTF wird beim Speichern konvertiert
Ich weiß nicht wie du darauf kommst, dass MySQL deine Daten verändert. Ich habe folgendes mit MySQL 4.1.10 getestet.
SQL-Code:
Die Daten werden unverändert gespeichert. Vielleicht bringt es dich ja weiter auf dem Weg der Erkenntnis, ich muss jetzt ins Bettchen.
CREATE TABLE test ( txt VARCHAR(10) CHARACTER SET UTF8 )
INSERT INTO test VALUES(x'efac81') SELECT COUNT(*) FROM test WHERE txt = x'efac81' marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz