In MySQL 4.0, to get German sorting order, you should start
mysqld with a
--default-character-set=latin1_de
option. This affects server behavior in several ways:
When sorting and comparing strings, the following mapping is performed on the strings before doing the comparison:
ä -> ae ö -> oe ü -> ue ß -> ss
All accented characters are converted to their unaccented uppercase counterpart. All letters are converted to uppercase.
When comparing strings with LIKE
,
the one-character to two-character mapping is not done. All
letters are converted to uppercase. Accents are removed from
all letters except Ü
,
ü
, Ö
,
ö
, Ä
, and
ä
.
In MySQL 4.1 and up, character set and collation are specified
separately. You should select the latin1
character set and either the latin1_german1_ci
or latin1_german2_ci
collation. For example, to
start the server with the latin1_german1_ci
collation, use the
--character-set-server=latin1
and
--collation-server=latin1_german1_ci
options.
For information on the differences between these two collations, see Section 9.1.12.2, “West European Character Sets”.
User Comments
Für alle bei denen dies nicht funktioniert
versucht es mal mit:
"--default-character-set=german1"
Bei mir ging es dann.
For all, this hint is not working, try it with:
"--default-character-set=german1"
Auf jeden fall german1 bei Latin_de geht es
irgendwie nicht!
Bei den Versionen 4.0.x bis Version sollte es im Normalfall mit "latin1_de" funktionieren.
Entweder als der Kommandozeilenparameter für mysqld und mysqlimport:
--default-character-set=latin1_de
oder in der my.cnf:
default-character-set=latin1_de
Dann hat man die deutsche Telefonbuchsortierung (Ä=AE,ü=ue,..).
Bei "german1" bekommt man dagegen nur Ä=A,ü=u,... für die Sortierung.
Achtung!
Folgende Hinweise helfen vielleicht endlose Fehlersuchen zu vermeiden:
- Der Zeichensatz latin1_de ist "complex", weil z.B. "ß" auf "ss", also 2 Zeichen, abgebildet wird. Das heißt er funktioniert NICHT mit "FULLTEXT"-Indexen. Es wird zwar keine Fehlermeldung ausgegeben, aber die Ergebnisse sind nach meinen Erfahrungen schlichtweg falsch. Wer also die Volltext-Funktionen von MySQL nutzt, sollte immer "german1" benutzen, oder aber "latin1" und sich eine eigene Spalte für die Sortierung erstellen.
- Wenn man schon Tabellen erstellt hat und den Zeichensatz des mysqld mit z.B.:
--set-default-characterset=germnan1
nachträglich ändert, bleibt die Datendatei trotzdem im alten Zeichensatz, welcher auch bei Sortierungen benutzt wird. Da hilft meiner Erfahrung nach auch kein "REPAIR" oder "MYISAMCHECK", auch wenn die Doku einem hier anderes glauben machen will.
Den Zeichensatz der Datenbankdateien kann man sich mit:
myisamchk -dvv tabelle.MYI
anzeigen lassen. Sollte dieser nicht dem gewünschten (und aktuell für mysqld angegebenen) entsprechen, so hilft es eigentlich nur die Datenbank komplett zu exportieren und wieder zu importieren, wobei die Tabellen neu erstellt werden müssen. Dies geht am einfachsten so:
Export:
mysqldump --all-databases --add-drop-table > backup.sql
Import:
mysql -lL < backup.sql
Danach haben definitiv alle Datendateien und Indexe den Zeichensatz wie aktuell für mysqld angegeben.
Ich habe jetzt die neuste Version von MySQL und da geht weder latin1_de noch german1 und mit latin1_german1_ci startet zwar der server sauber, aber in meiner applikation sehe ich die äöü als kryptische zeichen.
Vielleicht kann mir da jemand helfen.
Janine
Sollte eigentlich nicht passieren, da der Standard-Zeichensatz mitteleuropäische Zeichen unterstützt. Kryptische Zeichen habe ich auch, das liegt aber daran, dass der Zeichensatz in meiner Shell nicht richtig konfiguriert ist. In meiner Java-Applikation ist alles ganz normal.
Add your own comment.