Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi (MariaDB) Sortierreihenfolge in FDTable unterschiedlich (https://www.delphipraxis.net/194041-mariadb-sortierreihenfolge-fdtable-unterschiedlich.html)

MasterDetail 10. Okt 2017 14:36

Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: FireDAC

(MariaDB) Sortierreihenfolge in FDTable unterschiedlich
 
Hallo,

ich habe ein kleines Problem mit der Verwendung von FDTable in Verbindung mit unserer MySQL/MariaDB-Datenbank:
Die Sortierung vom Server (Sortierung mit ORDER BY) unterscheidet sich von der Sortierung auf dem Client (welche anhand der Eigenschaft "SortLocale" sortiert).

Insbesondere gibt es Probleme mit der Sortierung von Leerzeichen und Sonderzeichen. Wir sind folgende Sortierung gewöhnt: Leerzeichen -> Sonderzeichen -> Zahlen -> Buchstaben.

Da die FDTable ja seitenweise einliest mit "LIMIT X" und "WHERE" in Verbindung mit einem Primärschlüsselwert, kommt dieser durcheinander wenn ein doppelter Datensatz auftaucht.
In der Hilfe von Embarcadero wird empfohlen, die Formatoptions der FDTable entsprechend zu setzen:

SortLocale := MAKELCID(MAKELANGID (LANG_GERMAN, SUBLANG_GERMAN), SORT_DEFAULT);
SortOptions := [soNoSymbols];
StrsTrim := false;

- "SortLocale" hat nach der Ermittlung der obenstehenden LanguageID den Wert "1031". Default-Wert wäre "1024" -> Nichts gebracht
- "[soNoSymbols]" bewirkt den gleichen Fehler schon beim Öffnen und holen der ersten 4 Datensätze.
- "StrsTrim" bewirkt keinen Unterschied.

Ich habe mal aus Spaß "SortLocale" auf 0 gesetzt. Dann trat der Fehler nicht mehr an der gewöhnlichen Stelle auf, dafür aber ein paar 10000 Datensätze weiter.
Getestet wurde es in unserem Artikelstamm, dabei ist die FDTable angewiesen, die Tabelle nach der "Benennung" zu sortieren.

Nun zu meiner eigentlichen Frage:

Arbeitet ihr auch mit FDTables?
Hattet ihr mal das gleiche Problem?
Wenn ja, welche Werte benutzt ihr für die Sortieroptionen?

Nebenbei:
Die Tabelle auf dem Server hat die Standardkollation "latin1_swedish_ci", probiert habe ich aber auch "latin1_german1_ci" und "latin1_german2_ci".
Egal welche der drei Kollationen, bei einer Abfrage über HeidiSQL stand stets das Leerzeichen an erster Stelle und dann Sonderzeichen etc....

Delbor 11. Okt 2017 12:07

AW: (MariaDB) Sortierreihenfolge in FDTable unterschiedlich
 
Hi MasterDetail

Mit MariaDB selbst hab ich noch nie gearbeitet, aber mit MySQL. Und da ist es möglich, die Sortierreihenfolge pro Verbindung zu ändern. Also wird dies auch in MariaDB der Fall sein. Dadurch können UserA und UserB mit 2 unterschiedlichen Sortierreihenfolgen arbeiten.
Zitat:

...unterscheidet sich von der Sortierung auf dem Client (welche anhand der Eigenschaft "SortLocale" sortiert).
Jein... Der Server legt pro Verbindung für den avisierten Client eine bestimmte Sortierung fest - wobei ich davon ausgehe, dass auch dies bei MariaDB so wie bei MySSQL ist. "SortLocale" ist offenbar ein Firedac-Property. Da ich unter MySQL immer direkt mit dem Server gearbeitet habe (Sortierreihenfolge, Zeichensatz, MaxxAllowedpacket), kenne ich das bislang gar nicht.

Zu deiner eigentlichen Frage:
  • Arbeitet ihr auch mit FDTables?
    Nein. Ich werte die Querys per Code aus und beschreibe damit ein(..) Stringgrid
  • Hattet ihr mal das gleiche Problem?
    Eigentlich auch nicht. Ich musste den verwendeten Zeichensatz und MaxAllowedPacket anpassen
  • Wenn ja, welche Werte benutzt ihr für die Sortieroptionen?
    Die Sortieroptionen sind auf Serverseite so wie die deinen festgelegt. Das Programm ändert daran nichts mehr. Das ist aber gerade bei Internationaler Verwendung der Anwendung nicht möglich

Gruss
Delbor

PS: Ich weiss das zwar nicht wirklich, aber ich würde mich doch sehr wundern, wenn HeidiSQL nicht auch direkt mit dem Server arbeitet. Insbesondere da, wo es gilt, Metadaten zu bearbeiten, wie zum Bleistift Sortierreihenfolge oder Zeichensatz


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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