Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit sortierung bei Umlauten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Problem mit sortierung bei Umlauten

    Hallo,

    ich habe eine MySQL abfrage die wie folgt aussieht:

    Code:
     SELECT * FROM mitarbeiter ORDER BY 'name';
    Jedoch wenn in den Namen Umlaute vorhanden sind sortiert er nicht mehr richtig, das sieht dann folgendermaßen aus:

    Code:
     Mahler
     Mehrler
     Muhler
     Mähler
    Was kann man da tun?
    Hat jemand nen Rat?

    Danke.
    Gruß
    Jan


  • #2
    wenn dich nichts daran hindert, das ganze mit php zu sortieren, kann die usort() weiterhelfen

    Kommentar


    • #3
      Welcher Zeichensatz ist denn für die Tabelle eingestellt?

      Basti

      Kommentar


      • #4
        @Basti: wie kann ich das herausbekommen?

        Kommentar


        • #5
          Oh, frag mich nicht nach dem Befehl

          Schau dir die Datenbank einfach mal mit phpMyAdmin an. Dort findest du die Angaben und kannst ggf. auch umstellen. Die Sortierungsmehode (collation) hängt von deinem Zeichensatz ab und die wiederum natürlich von der Kodierung deiner Daten. Wenn deine Daten Latin-1-kodiert sind (also ISO-8859-1, -15 oder cp1252), dann setz die Datenbank/Tabellen auch auf Latin-1 und die Sortierung entweder auf latin1_german1_ci oder auflatin1_german2_ci, je nachdem, ob die Umlaute, z.B. ein "a" als "ae" etc. oder genau, wie ein "a" interpretiert werden sollen.

          Bei UTF-8-Kodierung der Daten setzt du eben auch die Datenbank/Tabellen auf "utf8" und die Sortierung eben auf "utf8_general_ci" oder "utf8_unicode_ci", falls "ß" als "ss" angesehen werden soll. Steht übrigends alles ganz gut im Manual beschrieben:

          Generelle Einführung:
          http://dev.mysql.com/doc/refman/5.1/...t-general.html

          Beispiel unterschiedlicher Sortierung deutscher Umlaute:
          http://dev.mysql.com/doc/refman/5.1/...on-effect.html

          Tabelle aller unterstützten Zeichensätze und zugerhöriger default collations:
          http://dev.mysql.com/doc/refman/5.1/...-charsets.html

          Liste der Sortierungen für Unicode-Sätze:
          http://dev.mysql.com/doc/refman/5.1/...code-sets.html

          Liste der Sortierungen für Westeuropäische Zeichensätze:
          http://dev.mysql.com/doc/refman/5.1/...t-we-sets.html

          Bleibt nurnoch herauszufinden, ob deine Daten nach UTF-8, ISO-8859-1, ISO-8859-15 oder sonstwie kodiert wurden - ich geh mal davon aus, dass du das nicht weißt.

          Wenn die Daten über ein Web-Formular in deine Anwendung kommen, dann entscheidet der Browser, in welcher Kodierung er die die Daten schickt und zwar anhand der Kodierung der Webseite, auf der das Formular erscheint. Du musst die Zeichensatz-Definition auf der Webseite also möglichst wasserdicht rüberbringen. Eine Meta-Tag-Angabe reicht bei meinen Tests z.B. zumindest in meinem Firefox nicht aus, den Default-Zeichensatz zu überschreiben. Das klappt ganz gut:

          PHP-Code:
          <?php
          header
          ("Content-type: text/html; charset=UTF-8");
          ?>

          <?xml version="1.0" encoding="UTF-8"?>

          <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
          Bei der XML-Deklaraion musst du natürlich aufpassen, dass sie nich als PHP-Code interpretiert wird - also entweder allow_short_open_tags abschalten oder ein ein print- oder echo-Statement setzen oder in eine Template natürlich, dessen Template-Engine da nichts durcheinanderbringt.

          Und, um herauszufinden, wie die Daten kodiert sind, kannst du mal ein wenig mit strlen() (z.B. sind Umlaute in UTF-8 zwei Bytes lang), iconv(), iconv_set_encoding() etc. rumspielen. Holst du z.B. "Käse" aus der Datenbank und strlen() gibt für diesen String 5 aus, dann war das ein UTF-8-Käse . Wenn du erwatungsgemäß 4 rausbekommst, dann wirds wohl ISO-8859-1 oder -15 oder cp1252 sein - aber da kann ich dir dann auch kein gescheites Vorgehen empfehlen, da ich probiere, mich an UTF-8 zu halten.

          Noch ein paar Links:

          Der HTML-Klassiker zum Thema I18N:
          http://de.selfhtml.org/inter/index.htm

          Wikipedia:
          Chaset-Kategorie:
          http://en.wikipedia.org/wiki/Category:Character_sets

          cp1252 (Unterschiede zur ISO):
          http://en.wikipedia.org/wiki/Windows-1252

          ISO-8859-1:
          http://en.wikipedia.org/wiki/ISO-8859-1

          ISO-8859-15:
          http://en.wikipedia.org/wiki/ISO-8859-15

          Basti

          Kommentar


          • #6
            Vielen Dank für deine ausführliche Antwort.

            Ich werde das mal durcharbeiten und bei Erfolg berichten

            Gruß
            Jan

            Kommentar


            • #7
              Zitat von codejunky
              Vielen Dank für deine ausführliche Antwort.
              Gerne. Ist meine Art zu lernen, denn der Thread war eine gute Gelegegenheit, nochmal ein wenig tiefer ins Thema reinzuschauen - und, ich glaube, dieses ist ebenso wichtig, wie vernachlässigt unter vielen Webdesignern und -programmierern.

              Basti

              Kommentar

              Lädt...
              X