Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zeichensatzauswahl bei Firebird (https://www.delphipraxis.net/152030-zeichensatzauswahl-bei-firebird.html)

idefix2 8. Jun 2010 23:30

Datenbank: Firebird • Version: 2.1 • Zugriff über: UIB

Zeichensatzauswahl bei Firebird
 
Hallo, ich bin jetzt mit meinen Experimenten mit Firebird etwas weitergekommen, der Zugriff mit den UIB Bibliothek funktioniert erfreulich glatt.

Jetzt fällt mir allerdings auf, dass der Zeichensatz, in dem meine Daten unter Windows sonst gespeichert sind (es handelt sich z.B. um aus Access exportierte tab-delimited Files) mit dem Firebirdzeichensatz nicht zusammenpasst, bei einem Select im ISQL werden mir statt Umlauten und Accents die absonderlichsten Sonderzeichen angezeigt.

Welchen Zeichensatz sollte ich in der Firebird Datenbank einstellen, um so weit wie möglich Windows-kompatibel zu sein und eine vernünftige Sortierfolge zu bekommen, vorzugsweise weil platzsparender und absolut ausreichend ein 8-Bit Zeichensatz? - Kann man überhaupt trotz des bei Delphi ausgebrochenen Unicode-Wahnsinns noch ohne Verrenkungen an eine Datenbank Strings mit 8-Bit-Zeichen übergeben?

mkinzler 9. Jun 2010 05:27

AW: Zeichensatzauswahl bei Firebird
 
Der Windows-Zeichensatz ist Win1252

Alfredo 9. Jun 2010 09:11

AW: Zeichensatzauswahl bei Firebird
 
Die deutsche Sortierung ist im Gegensatz zu MySQL bei Firebird ein Problem.

Ich löse dies über ein zusätzliches Sortfeld in dem dann z.B. für ä eben ae steht.

Als Zeichensatz verwende ich in meinen Programmen ISO8859-1 und collate DE_DE.

Hier ist eine schöne Beschreibung der Unterschiede zwischen ISO8859-1 und Win1252

http://de.wikipedia.org/wiki/ISO_8859-1

mkinzler 9. Jun 2010 09:18

AW: Zeichensatzauswahl bei Firebird
 
Das ist dann aber kein ASCII-Zeichensatz

Win1532 und Collation PXW_INTL850

idefix2 9. Jun 2010 12:18

AW: Zeichensatzauswahl bei Firebird
 
Hallo,

ich habe jetzt eine neue Datenbank mit default character set win1252 angelegt und eine Tabelle mit einem einfachen Programm ohne jede Konvertierung mit unter anderem :

Alizée
Hans Söllner

gefüttert. Wenn ich mir die Datensätze jetzt mit select * from Interpret im ISQL anschaue, zeigt er mir an:

35 AlizÚe
36 Hans S÷llner

Wie kann ich erreichen, daß die Umlaute und Accents stimmen? Und gibt es eine Möglichkeit, das:

Zitat:

Ich löse dies über ein zusätzliches Sortfeld in dem dann z.B. für ä eben ae steht.
zu vermeiden?

edit:
Zitat:

Die deutsche Sortierung ist im Gegensatz zu MySQL bei Firebird ein Problem.
Ich löse dies über ein zusätzliches Sortfeld in dem dann z.B. für ä eben ae steht.
Als Zeichensatz verwende ich in meinen Programmen ISO8859-1 und collate DE_DE.
Ich habe mir jetzt Deinen Link angeschaut - Mit der Collating Sequence ISO8859_1.DE_DE sollten doch Umlaute und Sonderzeichen ganz vernünftig sortiert werden? Was klappt da nicht, dass Du eine separate Spalte anlegst?

Noch etwas: Es schaut so aus, als würden bei all diesen Sortiersequenzen Gross- und Kleinbuchstaben ganz unterschiedliche Sortierwerte bekommen. Gibt es die Möglichkeit, so zu sortieren, dass Gross und Kleinbuchstaben gleich sortiert werden (ohne explizites Konvertieren der Felder in Uppercase)?

Aber mein primäres Problem ist jetzt natürlich, die Daten überhaupt richtig in die Datenbank hineinzubekommen.

Alfredo 9. Jun 2010 18:03

AW: Zeichensatzauswahl bei Firebird
 
Liste der Anhänge anzeigen (Anzahl: 2)
Aus den beigefügten Bilder siehst Du warum ich für DE_DE ein Sortfeld
gebraucht habe.

Wenn Du dir das Bild von der Sortierung PXW_INTEL850 ansiehst, wirst Du
feststellen, dass ich wieder etwas dazugelernt habe.

Hast Du bei deinem Datenfeld auch den Zeichensatz eingestellt?

mkinzler 9. Jun 2010 18:10

AW: Zeichensatzauswahl bei Firebird
 
Ja. GGf kann man die Collation auch im Order der Abfrage setzen

mkinzler 9. Jun 2010 18:16

AW: Zeichensatzauswahl bei Firebird
 
@idefix2: Welche Codepage haben die Quelldaten? Wie hast du diese eingefügt?

idefix2 9. Jun 2010 18:30

AW: Zeichensatzauswahl bei Firebird
 
Ja, auch bei den params habe ich den Zeichensatz eingestellt:

Delphi-Quellcode:
s1 = 'update or insert into interpret (name) values (?) matching (name) returning id;';
s2 = 'update or insert into album (name) values (?) matching (name) returning id;';
s3 = 'update or insert into basisverzeichnis (verzeichnis) values (?) matching (verzeichnis) returning id;';
Delphi-Quellcode:
par := TSQLParams.Create (csWIN1252);
erg := TSQLParams.Create (csWIN1252);

par.AddFieldType ('Name', uftVarchar);
erg.AddFieldType ('Id', uftInteger);

Felder := TStringList.Create;
Felder.Delimiter := #9;
Felder.StrictDelimiter := true;

UL.TransactionStart(trans, DB);
repeat readln (f,s); inc (linecount); // Hier lese ich aus einem Tab-delimited Textfile
    felder.DelimitedText := s;
    par.AsString[0] := Felder.strings[2];
    UL.DSQLExecImmed2(DB, trans, s1, 3, par, erg);
    ipnr := erg.AsInteger[0];
    par.AsString[0] := Felder.strings[3];
    UL.DSQLExecImmed2(DB, trans, s2, 3, par, erg);
    albnr := erg.AsInteger[0];
    par.AsString[0] := Felder.strings[11];
    UL.DSQLExecImmed2(DB, trans, s3, 3, par, erg);
    vznr := erg.AsInteger[0];
    until linecount >40; //eof(f);
Zitat:

Welche Codepage haben die Quelldaten?
Bis jetzt habe ich mich mit dieser Frage noch nicht beschäftigen müssen. Der "normale" Windows-Zeichensatz - wenn ich die Datei in Notepad oder einen Teil per cut and paste in den Delphi Quelltext-Editor oder hierher lade:

17 . Zazie, Alizée, Garou, Isabelle Boulay, P.Bruel, etc
18 ... Ungehört Hans Söllner

kommen die Zeichen richtig an. Ich lese die Daten mit einen Delphi Programm zeilenweise ein, weise sie mit Hilfe von "delimitedtext2 direkt einer Stringlist zu und weise dann die Stringlistelemente dem SQL-Abfrageparameter zu.

Im Hex-Editor sehe ich, dass ö in der Originaldatei den Wert $6E hat, é hat den Wert $E9.

Hansa 9. Jun 2010 20:19

AW: Zeichensatzauswahl bei Firebird
 
Ich glaube, ihr macht zuviel des guten. Habe mal bei mir in DB geguckt : Es steht folgendes drin :

Code:
SET SQL DIALECT 3;

SET NAMES ISO8859_1;

CREATE DATABASE '\DB.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1;
Nicht mal irgendwas mit collate steht drin. Hat mich selber gewundert. :shock: Sortieren / suchen, das geht in IBExpert, als auch im Delphi Programm.

mkinzler 9. Jun 2010 20:23

AW: Zeichensatzauswahl bei Firebird
 
Und die Sortierung ist wie gewünscht?
Ist ja wie Alfredos Vorschlag
Ist dann aber Unicode nicht wie er wollte ANSI;

idefix2 9. Jun 2010 20:30

AW: Zeichensatzauswahl bei Firebird
 
Was ist zuviel des Guten?

Ich würde gerne in meiner Datenbank die Umlaute so sehen, wie sie sein sollen. Das ist ganz entschieden NICHT zuviel des Guten.

Ich speichere die Daten ab, und dann steht Mist drinnen. Von collate rede ich ja im Moment noch gar nicht (sehr), das Problem mit der Sortierreihenfolge schau ich mir dann an, wenn die Umlaute in der Datenbank richtig angezeigt werden.

Laut dem Link von Alfredo zur Wikipedia ist der Zeichensatz ISO8859_1 dem Win1252 ziemlich ähnlich, hinsichtlich der Umlaute, die mir Schwierigkeiten machen, sollte kein Unterschied sein.

Ich nehme an, irgend etwas klappt nicht bei der Datenübergabe vom Programm an Firebird, da erfolgt vermutlich irgend eine sinnlose und falsche Konversion.

idefix2 9. Jun 2010 20:44

AW: Zeichensatzauswahl bei Firebird
 
Das Problem scheint ganz woanders zu liegen. Ich habe mir in einem Viewer das Datenbankfile selbst angeschaut, dort stehen die Umlaute so, wie sie sein sollen. Nur ein Select im ISQL zeigt Mist an. Ob die Umlaute alphabetisch richtig eingeordnet werden, weiss ich noch nicht.

ISQL Select läuft im Kommandozeileninterpreter - Könnte es sein, daß ISQL alle Umlaute im MS-Dos Zeichensatz interpretiert? Das wäre dann allerdings ein recht böser Bug.

edit: Das ist tatsächlich so: Wenn ich CMD aufrufe und mir die Original Textdatei mittels type anschaue, kommt genau der gleiche Mist heraus.

mkinzler 9. Jun 2010 20:50

AW: Zeichensatzauswahl bei Firebird
 
Könnte sein. Was zeigt IBExpert, FlameRobin usw an?

Chemiker 9. Jun 2010 20:52

AW: Zeichensatzauswahl bei Firebird
 
Hallo idefix2,

Du arbeitest mit Delphi 2009 dort sind die Strings auf jeden Fall Unicode-Strings. Könnte es vielleicht sein das Deine Zugriffskomponente nicht UNI-Code fähig ist?

Bis bald Chemiker

mkinzler 9. Jun 2010 20:55

AW: Zeichensatzauswahl bei Firebird
 
Es scheint ein Problem des alten CLI-Tools zu sein

Hansa 9. Jun 2010 21:14

AW: Zeichensatzauswahl bei Firebird
 
Zitat:

Zitat von idefix2 (Beitrag 1027536)
Das Problem scheint ganz woanders zu liegen...ISQL Select läuft im Kommandozeileninterpreter - Könnte es sein, daß ISQL alle Umlaute im MS-Dos Zeichensatz interpretiert? Das wäre dann allerdings ein recht böser Bug...ist tatsächlich so: Wenn ich CMD aufrufe und mir die Original Textdatei mittels type anschaue, kommt genau der gleiche Mist heraus.

Ach, da ist DOS-Textdatei im Spiel ? Dann kanns so nicht gehen. Sag das doch gleich. Schreibe in die Textdatei eben lediglich das richtige rein. :mrgreen: ASCII <-> ANSI.

idefix2 9. Jun 2010 21:35

AW: Zeichensatzauswahl bei Firebird
 
Also das Problem ist eindeutig auf das ISQL Tool beschränkt, das ich hiermit offiziell mit sofortiger Wirkung in Pension schicke. Ich habe mir jetzt die Daten mit der Database Workbench angeschaut - bin eben draufgekommen, dass man damit nicht nur die DDL, sondern auch die Daten anschauen und bearbeiten kann, und das natürlich wesentlich komfortabler als via ISQL. Die Umlaute sind in Ordnung.

Nur mit der Sortierreihenfolge muss ich mich noch spielen, die default collation liefert nichts brauchbares, aber da hat es ja weiter oben schon ein paar Vorschläge gegeben.

idefix2 9. Jun 2010 21:43

AW: Zeichensatzauswahl bei Firebird
 
@ Hansa:

Nein, eine DOS Datei ist nicht im Spiel. Bloss ist das mit Firebird mitgelieferte ISQL, mit dem ich bisher in die Datenbank hineingeschaut habe, offensichtlich in Wirklichkeit ziemlich unbrauchbar, weil es in einem MS-Dos Fenster läuft und die Windows-Umlaute so anzeigt, als wären es MS-Dos Umlaute.

Dass ich ISQL zum Anschauen verwendet habe, habe ich zwar schon bei meinem ersten Posting erwähnt, aber vermutlich verwendet dieses Programm (zu Recht) kein Mensch, und deshalb ist auch niemandem aufgefallen, dass dort der Fehler liegt.

Hansa 9. Jun 2010 22:22

AW: Zeichensatzauswahl bei Firebird
 
Zitat:

Zitat von idefix2 (Beitrag 1027583)
...Dass ich ISQL zum Anschauen verwendet habe, habe ich zwar schon bei meinem ersten Posting erwähnt, aber vermutlich verwendet dieses Programm (zu Recht) kein Mensch, und deshalb ist auch niemandem aufgefallen, dass dort der Fehler liegt.

Somit wird die Suppe (und zwar kräftig) versalzen. :mrgreen: Du brauchst drei Sachen : richtige DB - Version. Sagen wir mal FB >= 2.XX. Dann ein Tool, um die Rohdaten möglichst genau zu analysieren -> IBExpert. Selbst die kostenlose Personal ist besser, als die neueste IBConsole, oder gar den ISQL - Schwachsinn. Und dann eben noch die passenden Delphi-Zugriffskomponenten.

Alfredo 9. Jun 2010 22:54

AW: Zeichensatzauswahl bei Firebird
 
Da hat sich einer wunderbar mit dem Thema beschäftigt:

http://www.destructor.de/firebird/charsets.htm


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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-2025 by Thomas Breitkreuz