MySQL Sortierung ist irgendwie komisch!

webdoktor

Angesehenes Mitglied
Hallo zusammen

Ich lese mit einer Abfrage aus einer MySQL eine Zeile aus mit z.B. folgenden Einträgen:

1_02_Eine_Selbstevaluation.pdf
1_03a_ Loesung_Bedeutung_und_Thesen.pdf
1_03_Aufgabe_Warum_gibt_es_PM.pdf
1_03_Aufgabe_Warum_gibt_es_PM_Loes.pdf
1_04a_Antworten_zur_Initialisierung.pdf
1_04_Grundfragen_der_Projektinitialisierung.pdf

Die Sortierung (Order BY title) habe ich auf asc gelassen. Wieso erscheinen die Einträge
mit dem "a" vor dem ohne "a". Also z.b:

1_03a_ Loesung_Bedeutung_und_Thesen.pdf
1_03_Aufgabe_Warum_gibt_es_PM.pdf

Sollte das nicht in umgekehrter Reihenfolge sein? Wenn ich es als test z.b. im Datei Explorer
bei Windows anschaue dann kommt es richtig d.h. ohne "a" kommt vor "a".

Hat jemand eine Ahnung an was es liegen kann? Die SQL Abfrage sieht so aus:
CODE $db_query="SELECT files.id,files.title,beschreibung FROM files,user_files WHERE user_files.user_id=".$_SESSION['id']." and user_files.file_id=files.id ORDER BY title";


Freue mich auf eure Hilfe!
Marco



 
Hallo Jörg

Danke für Deine prompte Antwort. Habe ich das richtig verstanden, dass ich auf der Datenbank bei der
entsprechenden Tabelle die Collation ändern muss?

Hast Du Erfahrung, welche ich benutzen muss damit es so sortiert wie ich beschrieben habe?

Danke für Deine Hilfe.
Marco
 
Hi zusammen

CODE Das "_" kommt hier nach dem "a".


In Windows z.B. Datei-Explorer oder Excel ist es aber nicht so, da kommt das "_" vor dem "a" und
so möchte ich es auch bei der Ausgabe sortiert haben *grübel*.

Marco
 
Die Wahl der Collation hängt auch von dem verwendeten Zeichensatz ab. Bei Latin1 kannst du zwischen den Latin1 Collationen wählen. Auf der von mir verlinkten Seiten rangiert das "_" (005F) anscheinend überall hinter den Buchstaben.

Bei Windows ist die Reihenfolge dann wohl eine andere. Unter Linux (Konsole und Dateimanager Nautilus) rangiert das "a" auch vor dem "_"
 
Hi

Sehe ich das richtig, dass es unter Linux wohl nicht möglich ist, dass "a" nach dem "_"
zu positionieren?

Grüsse Marco
 
Ich denke mal, dass hängt ganz von der Zeichenkodierung ab (bzw. auch COLLATE bei MySQL):

CHARSET=utf8 COLLATE=utf8_unicode_ci
SQL SELECT text FROM `test` ORDER BY text ASC



CODE +--------+
| text   |
+--------+
| _aa    |
| 1_03_A |
| 1_03a_ |
| aaa    |
+--------+



CHARSET=latin1 COLLATE latin1_german1_ci

SQL SELECT text FROM `test1` ORDER BY text ASC



CODE +--------+
| text   |
+--------+
| 1_03a_ |
| 1_03_A |
| aaa    |
| _aa    |
+--------+




PS: Mein Nautilus zeigt erst _aa, dann aaa, gleiches bei der Shell:


CODE ****@****:~/test$ ls -lha
insgesamt 16K
drwxr-xr-x  2 user user 4,0K  4. Mär 18:43 .
drwxr-x--- 67 user user  12K  4. Mär 18:42 ..
-rw-r-----  1 user user    0  4. Mär 18:43 _aa
-rw-r-----  1 user user    0  4. Mär 18:43 aaa
 
QUOTE (Sascha Ahlers @ Do 4.03.2010, 18:01) PS: Mein Nautilus zeigt erst _aa, dann aaa, gleiches bei der Shell:


CODE ****@****:~/test$ ls -lha
insgesamt 16K
drwxr-xr-x  2 user user 4,0K  4. Mär 18:43 .
drwxr-x--- 67 user user  12K  4. Mär 18:42 ..
-rw-r-----  1 user user    0  4. Mär 18:43 _aa
-rw-r-----  1 user user    0  4. Mär 18:43 aaa


Ja, das ist merkwürdig, ich hatte einen anderen Testsatz und dadurch ein anderes Ergebnis? Habe ich da Tomaten auf den Augen, oder was für eine Sortierlogik steckt dahinter:


CODE joerg@***:~/test/collation$ ls -lha
insgesamt 8,0K
drwxr-xr-x 2 joerg joerg 4,0K  4. Mär 18:37 .
drwxr-xr-x 5 joerg joerg 4,0K  4. Mär 14:06 ..
-rw-r--r-- 1 joerg joerg    0  4. Mär 18:31 1_03a_
-rw-r--r-- 1 joerg joerg    0  4. Mär 18:32 1_03_A
-rw-r--r-- 1 joerg joerg    0  4. Mär 18:28 _aa
-rw-r--r-- 1 joerg joerg    0  4. Mär 18:28 aaa
 
QUOTE Ich denke mal, dass hängt ganz von der Zeichenkodierung ab (bzw. auch COLLATE bei MySQL):


Ja, das meinte ich ja auch:


QUOTE Die Wahl der Collation hängt auch von dem verwendeten Zeichensatz ab.


Meine Bemerkung zu Linux weiter unten verursachte wohl das Missverständnis, dass ich damit den Zeichensatz des Betriebssystems meine - ich bezog mich mit der obigen Bemerkung aber natürlich auf den Zeichensatz der Datenbank (bzw. Tabelle / Spalte)
 
Ich habe mal oben die MySQL-Daten mit Deinen Testdaten angeglichen, dort bleibt es gleich.

Im Linuxdateisystem scheinen nur führende Unterstriche vorher sortiert zu werden, wobei ich gerade an meiner Dateinamenkodierung zweifle , oder aber an der Linux-Sortierung im Dateisystem:

CODE *****@******:~/test$ ls -lha
insgesamt 16K
drwxr-xr-x  2 user user 4,0K  4. Mär 19:58 .
drwxr-x--- 67 user user  12K  4. Mär 19:52 ..
-rw-r-----  1 user user    0  4. Mär 19:49 1_03a_
-rw-r-----  1 user user    0  4. Mär 19:49 1_03_A
-rw-r-----  1 user user    0  4. Mär 19:49 _aa
-rw-r-----  1 user user    0  4. Mär 19:49 aaa
-rw-r-----  1 user user    0  4. Mär 19:49 aaaa_
-rw-r-----  1 user user    0  4. Mär 19:49 aaa_a
-rw-r-----  1 user user    0  4. Mär 19:49 l_03a_
-rw-r-----  1 user user    0  4. Mär 19:49 l_03_A
-rw-r-----  1 user user    0  4. Mär 19:49 l03a_
-rw-r-----  1 user user    0  4. Mär 19:49 l03_A



PS: Habe beim MySQL-Sortierung gerade noch einen Fehler berichtigt.
 
Hallo zusammen

Bei der Datenbank habe ich bei der entsprechenden Zeile den Wert Collation schon verändert leider
ohne Erfolg. Auch habe ich versucht in die Abfrage bereits das COLLATE hinzuzufügen:

CODE $db_query="SELECT files.id,files.title,beschreibung FROM files,user_files WHERE user_files.user_id=".$_SESSION['id']." and user_files.file_id=files.id ORDER BY title COLLATE latin1_german1_ci
";


Leider auch hier ohne Erfolg. Hat jemand noch einen Tipp?

Grüss Marco
 
utf8_unicode_ci nicht latin1_german1_ci, sonst ändert sich nichts, aber so was bei einer Datenbankabfrage mitzugeben, statt alles komplett umzustellen, ist ja gefrickel.
 
Hallo Sascha

Ich habe jetzt alles komplett umgestellt und es funktioniert super!

Vielen herzlichen Dank für Deine Bemühungen und natürlich auch
ein grosses "Merci" an alle anderen die mir versucht haben zu helfen.

Wünsche ein schönes Weekend.
Marco
 
Zurück
Oben