php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.10.2005, 16:18  
Gast
 
Beiträge: n/a
Standard 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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.10.2005, 22:39  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

wenn dich nichts daran hindert, das ganze mit php zu sortieren, kann die usort() weiterhelfen
Buhmann ist offline   Mit Zitat antworten
Alt 13.10.2005, 23:11  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Welcher Zeichensatz ist denn für die Tabelle eingestellt?

Basti
Basti ist offline   Mit Zitat antworten
Alt 14.10.2005, 09:22  
Gast
 
Beiträge: n/a
Standard

@Basti: wie kann ich das herausbekommen?
  Mit Zitat antworten
Alt 14.10.2005, 12:06  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

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
Basti ist offline   Mit Zitat antworten
Alt 14.10.2005, 12:18  
Gast
 
Beiträge: n/a
Standard

Vielen Dank für deine ausführliche Antwort.

Ich werde das mal durcharbeiten und bei Erfolg berichten

Gruß
Jan
  Mit Zitat antworten
Alt 14.10.2005, 12:29  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
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
Basti ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
sortierung brian johnson Datenbanken 6 05.05.2008 19:53
Problem mit DB-Ausgabe und Speicherung Lia PHP Tipps 2008 3 18.09.2007 20:59
Problem mit Umlauten flflfl PHP Tipps 2006 2 06.09.2006 16:53
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit Umlauten in einer E-card/Benachrichtigungsmail PHP Tipps 2004-2 2 19.11.2004 11:29
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
utf8 sortieren umlauten php, php sortieren umlaute, php umlaute sortieren, php usort umlaute sortieren, utf-8 umlaute sortieren php4, php sortierung umlaute, umlaute sortierung in php usort, utf 8 umlaute sortieren, php umlaute utf8 sortieren, sql server deutsch umlaute sortieren, php sortieren mit umlaute, usort umlaute, php sort umlaute, javascript utf 8 umlaute sortieren, umlaute iso 8859-15 sortierung, javascript tabelle sortieren umlaute, php sortierung umlaut, php uasort utf-8 umlaute, utf8_general_ci umlaute sortieren, php nach umlauten sortieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.