4.3. Wie kann ich Umlaute richtig sortieren?

MySQL benutzt als Standard den ISO-8859-1 (Latin1) Zeichensatz, der die meisten europäischen Sprachen und ihre Sonderzeichen, darunter auch die deutschen Umlaute, enthät. Dieser Zeichensatz ist jedoch so organisiert, dass z.B. Umlaute nicht zwischen den 26 Buchstaben einsortiert sind (also z.B. ö bei o), sondern im hinteren Bereich des Zeichensatzes. Dies führt dazu, dass beim Sortieren Umlaute nach Z aufgeführt werden.

Seit Version 3.23 gibt es auch einen Zeichensatz "german1". Bei diesem Zeichensatz sind die Umlaute fast richtig einsortiert. Erst ab Version 4 gibt es den Zeichensatz "latin1_de", der die deutschen Umlaute wirklich korrekt einsortiert (so wie im Telefonbuch).

Wenn man MySQL nicht selbst kompiliert, kann man mit dem Startparameter --default-character-set=german1 bzw. --default-character-set=latin1_de sicherstellen, dass auch der richtige Zeichensatz verwendet wird (sofern der gewünschte Zeichensatz bei der Kompilation ausgewählt wurde). Diesen Parameter kann man auch in der Sektion [mysqld] in /etc/my.cnf setzen:

[mysqld]
[...]
set-variable    = default-character-set=german1		# Version 3.23
bzw.
set-variable    = default-character-set=latin1_de	# Version 4

Unter Windows (getestet wurde Windows 98) funktioniert obiges nicht, dort muss man folgendes eintragen:

[mysqld]
[...]
default-character-set=german1

Wenn man keine Möglichkeit hat, den verwendeten Zeichensatz zu beeinflussen, dann gibt es auch noch einen Workaround, der in der PHP-FAQ unter http://www.dclp-faq.de/q/q-mysql-umlaute-sortieren.html beschrieben wird.