Thread MySQL :: Brauche Denkanstoß
(8 answers)
Opened by MartinR at 2008-11-30 16:06
Nachtrag: Ich habe in der Dokumentation verschiedener Datenbanksysteme nachgelesen:
- Bei SQLite3 kann man wirklich alles miteinander per < oder <= vergleichen, im Zweifelsfall wird binär per memcmp verglichen, aber auf jeden Fall ist der Vergleich immer konsistent mit einer ORDER BY-Klausel. Man kann insbesondere nicht nur hinter ORDER BY sondern auch hinter jeden Ausdruck mit Vergleichsoperator eine COLLATE-Klausel setzen, um die Vergleichsfunktion explizit festzulegen. - PostgreSQL kann mit ORDER BY alle Datentypen sortieren, für die eine B-Tree-Operatorklasse definiert ist. Man kann also einen benutzerdefinierten Datentyp erzeugen, auf dem < oder <= nicht oder inkonsistent mit der B-Tree-Operatorklasse definiert sind. Für alle eingebauten Datentypen gilt aber, dass sie sich entweder mit ORDER BY und < oder <= konsistent vergleichen lassen, oder gar nicht. - Bei MySQL habe ich leider in der Dokumentation und mittels Google keine Informationen darüber gefunden, wie die Vergleiche genau funktionieren. Ein kurzes Experiment legt aber nahe, dass bei Stringvergleichen ähnlich wie bei SQLite3 auch hier eine Sortierreihenfolge angegeben werden kann und alle Datentypen, die man mit ORDER BY sortieren kann auch mit den Vegleichsoperatoren konsistent verglichen werden können. Ich wage daher zu behaupten, dass man mit meinem Ansatz keine Probleme bekommen sollte, solange man immer gleiche Datentypen miteinander vergleicht. Wenn Konversionen zum Tragen kommen, was hier nicht der Fall sein dürfte, verhalten sich die verschiedenen Datenbanken wieder etwas weniger einheitlich. When C++ is your hammer, every problem looks like your thumb.
|