Zeichenkodierung - MySQL Teil 1
1. Die Abschnitte
- Einführung
- Das Grundproblem
- HTML
- CSS
- MySQL Teil 1
- MySQL Teil 2
- PHP
- PHP und HTML
2. Ein Hinweis
Für die Erstellung unserer Datenbank greife ich wie angekündigt, bei diesem Beispiel auf phpMyAdmin zurück, da der im Gegensatz zu anderen MySQL-Frontends wunderbar mit Unicode klarkommt. Die Arbeit damit setze ich als bekannt voraus. Ansonsten müsst ihr ein wenig damit herumspielen.
3. Top-Down
Dieses Prinzip greift, sobald man es mit Tabellenfeldern vom Typ Text zu tun hat. Also zum Beispiel VARCHAR
oder
TEXT
. Dabei gibt es eine einfache Regel. Denn die so genannte Kollation (der Zeichensatz) wird von oben nach unten vererbt,
wenn man die bei Textfeldern nicht explizit angibt, welcher Zeichensatz genommen werden soll. Sollte man allerdings jedwede Angabe
vergessen, so wird der Standardzeichensatz latin1_swedish_ci
genommen. Die spinnen, die
Schweden.
Ein paar Beispiele
-
Datenbank ohne Kollation
-
Tabelle ohne Kollation
- Feld ohne Kollation mit Standardwert
latin1_swedish_ci
- Feld ohne Kollation mit Standardwert
-
Tabelle ohne Kollation
-
Datenbank mit Kollation
utf8_irgendwas
-
Tabelle ohne Kollation
- Feld ohne Kollation mit
utf8_irgendwas
von Datenbank
- Feld ohne Kollation mit
-
Tabelle ohne Kollation
-
Datenbank mit Kollation
latin1_general_ci
-
Tabelle mit Kollation
utf8_irgendwas
- Feld ohne Kollation mit
utf8_irgendwas
von Tabelle
- Feld ohne Kollation mit
-
Tabelle mit Kollation
4. utf8_irgendwas
MySQL stellt uns bei Unicode (UTF-8) eine ziemlich lange Liste von Möglichkeiten zur Verfügung. Aber welche sollte man nun nehmen. Nun,
diese ganzen sprachspezifischen Zeichensätze à la utf8_slovak_ci
sollte man normalerweise meiden wie der Teufel das Weihwasser.
Bleiben also noch drei, mit denen man problemlos arbeiten kann.
utf8_bin
utf8_general_ci
utf8_unicode_ci
5. Ein feiner Unterschied
Leider beschränken sich meine Fremdsprachenkenntnisse auf Englisch, ein paar Brocken Französisch sowie einige Sätze auf Latein, die
ich noch aus den Asterix-Heften in Erinnerung habe. Darum beziehen sich die folgenden Erläuterungen ausschließlich auf Deutsch mit seinen
Umlauten. Also, es gibt einen kleinen aber gravierenden Unterschied zwischen utf8_bin
auf der einen Seite und
utf8_general_ci
/utf8_unicode_ci
. Und zwar bei einer Sortierung mittels ORDER BY
. Denn wenn ein
Feld mit einem Umlaut beginnt, so sieht das Ergebnis zum Beispiel so aus.
utf8_bin
- Angsthase
- Erbärmlicher Feigling
- Ängstliches Reh
utf8_general_ci
/utf8_unicode_ci
- Angsthase
- Ängstliches Reh
- Erbärmlicher Feigling
Darum sollte man auch auf utf8_bin
verzichten, da die Sortierung zumindest im Deutschen ziemlich ungewohnt ist. Und wie man nun
praktisch mit utf8_general_ci
beziehungsweise utf8_unicode_ci
arbeitet, zeige ich euch jetzt.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt