Sortierung Java vs DB

S

SlaterB

Gast
hallo,

ich sortiere Text-Daten in der DB und dieselben Daten auch Java,
z.B. hole ich mir zwei Iteratoren über lange Datenströme nach einer textuellen Id,
und gleiche den Stand der Iteratoren ab
"Iterator B, laufe bis zu Eintrag X von A, falls vorhanden, überspringe in Sortierung kleinere, gehe nicht weiter"

dabei stören mich die verschiedensten Sortierunterschiede, null anders
(vorne oder hinten, wobei String.compareTo() an sich sowieso schon streikt),
Kleinbuchstabe vor Großbuchstaben statt andersum,
gerade habe ich # vor Zahlen statt andersrum entdeckt
und wer weiß was es noch gibt

ich sollte wohl mal alle relevanten Zeichen in eine Tabelle einfügen und das sortierte Ergebnis anschauen

gibt es schon fertige Auflistungen, vielleicht schon für Java einen passenden Comparator
oder ganz andere Vorschläge/ Erfahrungen dazu?
 
S

SlaterB

Gast
das # ist ja verrückt, hat das eine definierte Sonderrolle?
inzwischen klemmt schon meine entsprechende Taste..

Code:
b#
b#0
b0
b##00
b#0#0#
b#00
b00
b0#0#0
b000
b#01
b01
b#1
b1
b#21
b#22
b22
b#23
b33
bei Oracle geht ja noch, da wird # anscheinend einfach ignoriert, wenn aber der Rest dahinter gleich ist, kommt der Eintrag mit # weiter nach vorne,
allzu viele Kombinationen mit # selber habe ich lieber noch nicht angeschaut

-----

Code:
b#
b0
b#0
b##0
b###0
b#00
b##00
b#0#0
b00
b000
b00#0
b00#00
b0000
b00000
b#01
b01
b#02
b1
b2
b#2
b#22
b22
b#23
b3
b#3
b#333
b333
b#44
b44
b#444
b444
bei Postgres dagegen schlimmer, wenn nur ein Zeichen nach dem # folgt, etwa b2 zu b#2, dann ist der #-Eintrag weiter hinten,
wenn aber mehr Zeichen folgen, etwa b22 zu b#22, dann der #-Eintrag nach vorne??

an Einfüge-Reihenfolge bei vermeintlicher Gleichheit liegts nicht und DESC-Sortierung liefert gegen entgegengesetzes Verhalten
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Interessante Fragestgellung. Das habe ich noch nie hinterfragt. Ich habe es immer die Datenbank machen lassen, ohne auf Inkonsistente Reihenfolgen zwischen Java- und DB-Sortierung zu achten. Bin auf die Ergebnisse gespannt.
 

gp

Aktives Mitglied
Sortierung ist eine Sache für sich:
  • der Duden macht es anders als das Telefonbuch
  • Österreich anders als Deutschland
  • andere Kulturen machen eh was sie wollen

Nur mal so - zur Anregung :autsch:

Welcher Zeichensatz ist in deinem Textfeld? Unicode, Windows, oder was auch immer? Wie ist die Sortierung der Datenbank eingestellt. Ist die Sortierung nutzerabhängig?

Erwarte jetzt bitte keine Lösung - es kommt halt immer darauf an.

Für schwierige Fälle, insbesondere wenn die Anwendung international wird (aber so richtig: mit Russen, Chinesen und Persern), bleibt wohl nur eine Sortierung der (Unicode-) Texte über eigene Java-Routinen. Vor allem wenn die Sache noch datenbankunabhängig bleiben soll.

Günter
 

Marco13

Top Contributor
Ich hab' keine Ahnung davon (und WIE wenig, habe ich erst gemerkt, als ich versucht habe, trotzdem eine mögliche Antwort zu finden) aber ... bei c# string sorting VS Oracle string sorting - Stack Overflow hatte jemand das Problem für C#. Dort ist dieses "NLS_SORT" bzw. "NLSSORT" beschrieben (wtf ist der Unterschied?) ... Sowas wie Datatype Comparison Rules könnte interessant sein, hilft aber nicht unmittelbar. Kann es sein dass das '#' so eine Art "Escape-Character" ist...? :bahnhof:

EDIT: BTW, ich nehme an, dass die eigentliche Schwierigkeit die ist, eine allumfassende und Verbindliche Definition der Sortierregeln für die DB zu finden ( bzw. für die verschiedenen DBs ). Die dann als Comparator in Java umzusetzen wäre im Idealfall ja eher eine Fleißarbeit. Wenn es aber um die umgekehrte Richtung geht, nämlich der DB zu sagen, "welchen Comparator" sie verwenden soll, kann ich NOCH weniger dazu sagen.... :oops:
 
Zuletzt bearbeitet:
S

SlaterB

Gast
es betrifft wohl viele Sonderzeichen, inklusive - und _
im Moment vermute ich alles außer Ziffern, Groß- und kleinbuchstaben

dass es irgendeine abweichende Reihenfolge gibt wäre ja noch ok, aber Zeichen quasi auslassen?
wobei ich dann unter verschiedenen 'Auslassungsvarianten' immer noch Reihenfolge herstellen muss..

selbst mit Auslassen ist Oracle wenigstens konsistent, aber Postgres macht mich noch verrückter,
kann irgendjemand in irgendeiner DB erstmalig bestätigen oder wiederlegen, ob
> b01
> b_02
> b03
so sortiert wird oder anders?

Datatype Comparison Rules
führt alle Zeichen auf, auch #, aber nichts von komischer Behandlung die Rede

----

ich dachte zunächst noch, in der DB den Text mit replace() für die Sortierung zu ändern, nur bei # noch halbwegs praktikabel,
aber gibt ja viele Zeichen, und Aufwand auch gar nicht schön

jetzt werde ich wohl bald rangehen und jede noch so kleine Besonderheit pro DB in Java-Comparator nachbilden,
inklusive einer Tabelle mit 100 Testeinträgen, in jeder DB am Anfang sortiert und mit Java-Sortierung verglichen,
um gleich jede Besonderheit wie umgestellte Locale automatisch zu melden..
 
S

SlaterB

Gast
hmm hmm, besonders bei Oracle,
ich habe 11.1.x, aber an einen solchen Unterschied durch Version mag ich kaum glauben, eher Konfiguration..
 
S

Spacerat

Gast
Also ich hab' immer angenommen, dass ein Computer eigentlich nur "Zahlen" sortiert, also ASCII, UTF, EBCDIC...
UTF und ASCII unterscheiden sich in den ersten 127 Codes ja nicht, wohl aber EBCDIC und ASCII.
ASCII-Reihengolge: Zeichen, Ziffern, Buchstaben,
EBCDIC-Reihenfolge: Zeichen, Buchstaben, Ziffern...
Auf der verlinkten Oracle-Seite fehlen die Einträge der EBCDIC-Ziffern (240-249), aber dass würde im Zweifelsfalle höchstens erklären, dass bei EBCDIC die Ziffern vor den Buchstaben liegen, die Zeichen liegen ja in allen Fällen vorne. ???:L:bahnhof:
 

xote

Mitglied
Marco13 hat gesagt.:
Kann es sein dass das '#' so eine Art "Escape-Character" ist...?
Ich glaube nicht, dass er nach den Unicode Escape-Sequenzen sortiert , also von \u0000 bis \uffff. Ich wäre mir jetzt auch gar nicht sicher, ob die zur Laufzeit vorkommen, denn meines Wissens nach werden Escape-Sequenzen vor der eigentlichen Interpretation des Quelltextes ausgetauscht. Der Compiler sieht das schon gar nicht mehr und damit auch nicht das JAVA Programm. Denke ich mir halt.

Aber ich denke wohl, dass da nach irgendwas sortiert wird. Willkürlich ist eher nicht.
 
S

SlaterB

Gast
wie gesagt betrifft es dann auch quasi alle Sonderzeichen, jedenfalls die paar geläufigen die ich getestet habe, - _ ; . usw.
# keine besondere Bedeutung mehr

ich hatte mir zu Hause Postgres installiert, da gab es kein Problem,
wird wohl irgendeine seltsame Einstellung im 'Rechenzentrum' auf der Arbeit sein,
dazu passt dass Oracle und Postgres mehr oder weniger gleichmäßig betroffen sind

> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
liefert 'WE8ISO8859P15'

aber
Oracle in World: Difference between WE8ISO8859P1 and WE8ISO8859P15 characterset
ist zwar mal ein Artikel nah an einzelnen Zeichen, schreibt dennoch nichts von solchen Merkwürdigkeiten,

die Frage ist quasi auch ob überhaupt irgendwelche Einstellungen bekannt sind, um so etwas zu erreichen ;)
 

FerFemNemBem

Bekanntes Mitglied
Mahlzeit,

die Frage ist quasi auch ob überhaupt irgendwelche Einstellungen bekannt sind, um so etwas zu erreichen ;)

Ja, und zwar (bei Oracle):
Code:
alter session set nls_sort=german;

Damit bekomme ich Deine "Unsortierung" auch hin. Wenn man den default: "nls_sort=binary" laesst, wird so sortiert, wie man sich das denkt/wuensch/erhofft.

Gruss, FFNB.
 

FerFemNemBem

Bekanntes Mitglied
Mahlzeit,

Da werden bei der Sortierung Diakritische Zeichen ignoriert. Etwas mehr von Oracle zu dem Thema gibts hier. Aber das hattest Du dann sicher auch schon gefunden...

Gruss, FFNB.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
V Browsergame mit Java(WebSocketServer) als Backend? Netzwerkprogrammierung 5
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Fragen zu Java Webservice mit Axis2 Netzwerkprogrammierung 0
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
mor16Euro HTTP Php website mit Java aktualisiern Netzwerkprogrammierung 6
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
L Remote Desktop per Java steuern Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
J Webserver mit Java schreiben? Netzwerkprogrammierung 4
D JAVA RMI Netzwerkprogrammierung 1
K HTTP Mit Java HTML Codeauslesen um damit zu arbeiten Netzwerkprogrammierung 7
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
T VPN-Verbindung über Java Netzwerkprogrammierung 4
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
L FTP Java Interpreter unterbindet SSL Handshake Netzwerkprogrammierung 2
C IFrame mit java auslesen Netzwerkprogrammierung 1
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
C Datensammlung mit Java RMI Netzwerkprogrammierung 0
K Java Jsoup : OnLoad Netzwerkprogrammierung 0
S Java Chat Server Netzwerkprogrammierung 8
Carres HTTP Vorhandenen Session-ID Cookie von Firefox, Chrome oder IE in Java verwenden Netzwerkprogrammierung 2
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
Thallius HTTP HTTPS unter Java 1.6 schlägt fehl Netzwerkprogrammierung 4
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
P Chat in Java Netzwerkprogrammierung 3
C java.net.ConnectException: Operation timed out? Netzwerkprogrammierung 2
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
T curl request in java umwandeln Netzwerkprogrammierung 4
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1
H Portforwarding umgehen in Java? Netzwerkprogrammierung 5
D Response in Java Servlet erzeugen Netzwerkprogrammierung 0
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
E HttpUrlConnectionExample cannot be resolved to a type / Java 8 Netzwerkprogrammierung 1
F Socket Java Server mit Android App, Antwort vom Server an App Netzwerkprogrammierung 5
M Java-Programm aus dem Web laden Netzwerkprogrammierung 3
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
J access denied (“java.net.SocketPermission”…) mit Java 8 Netzwerkprogrammierung 1
N CURL requests in Java Netzwerkprogrammierung 6
P Kritische Java-Anwendung und Citrix veröffentlichen Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
1 Netty NIO oder Java IO Netzwerkprogrammierung 2
1 Via Java mit WLAN Netzwerken verbinden Netzwerkprogrammierung 5
J Java Service Wrapper Netzwerkprogrammierung 1
K Mit Java ASPX Webseite fern steuern Netzwerkprogrammierung 2
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
K Emailsenden via Java Applikation Netzwerkprogrammierung 5
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
P PHP Script per Java ausführen Netzwerkprogrammierung 2
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T php/java-bridge Netzwerkprogrammierung 16
D Webseite(mit JavaScript-Element) mit Java auslesen Netzwerkprogrammierung 0
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
E Java Server übers Internet erreichen Netzwerkprogrammierung 4
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
windl AirPlay mittels Java Netzwerkprogrammierung 0
R Email mit Java API Netzwerkprogrammierung 1
P Java Deauth / Deauthentication request Netzwerkprogrammierung 10
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
R Java - Socketprogrammierung Netzwerkprogrammierung 10
B Methoden und Konstruktoren von Java.net package werden nicht geladen Netzwerkprogrammierung 2
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
N Socket java.net.ConnectException Netzwerkprogrammierung 5
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
V json_encode in java?? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben