dedlfix: Kollation swedish was bedeutet das?

Beitrag lesen

echo $begrüßung;

Noch ein paar Restantworten:

cdcol  latin1_general_ci

Zunächst einmal besteht der Wert latin1_general_ci aus drei Teilen. Der erste ist die Kodierung, der zweite die Kollation und dazu gehört auch der dritte Teil, die case (in)sensitivity (Groß- Kleinschreibungsberücksichtigung).

[...] aber warum sind diese [Kollationen] so unterschiedlich und wenn ich eine neue DB anlege per default latin1_swedish_ci, bin doch kein Schwede?

Die anderen Datenbankersteller haben beim Anlegen eine Default-Kollationsangabe gemacht. Wenn du keinen entsprechenden Parameter im CREATE-Stetement angibst, wird ein (konfgurierbarer) System-Default-Wert verwendet. Kollationsangaben für das System, die Datenbanken und die Tabellen sind jeweils nur Default-Angaben, wenn für untergeordnete Elemente keine explizite Angabe gemacht wurde. Letzlich zählen nur die Angaben der einzelnen Felder, die durchaus auch unterschiedlich sein können. (Inwieweit das sinnvoll ist, muss im Einzelfall betrachtet werden.)

Wäre es nicht sinnvoller wenn alle die gleiche Kollation haben würden?

Nein, nicht in jedem Fall, da die Sortierregeln je Sprache und Anwendungsfall berücksichtigt werden müssen.

Was ist für den normalen deutschen Betreiber am sinnvollsten, wenn auch mal ausländische Zeichen drin sein könnten, allerdings die Scripte und HTML Formulare nicht UTF-8 sind?

Als Kollation musst du die nehmen, die deinen Bedürfnissen entspricht. Es gibt im Deutschen mindestens zwei Sortiersysteme. Die einzelnen Unterschiede findest du im Handbuchkapitel Character Sets and Collations That MySQL Supports.

Die Kollation ist für die interne Datenverarbeitung (Sortierung, Vergleiche) wichtig. Für die Kommunikation mit Clients spielt auch noch die Kodierung (ohne Kollation, weil da nicht benötigt) auf der jeweiligen Verbindung eine wichtige Rolle. Die sollte nach jedem Verbindungsaufbau explizit ausgehandelt werden. Dafür gibt es die API-Funktion mysql_set_charachter_set(), für die es in den Umsetzungen der diversen Programmiersprachen Pendants geben sollte. Wenn nicht, ist hierzulande auch ein "SET NAMES"-Statement ausreichend. Wenn die Kodierung auf der Verbindung und die der einzelnen Felder nicht übereinstimmt, nimmt MySQL Umkodierungen vor. Das geht nicht von jeder in jede Kodierung verlustfrei, da ja nicht mit allen Kodierungen alle Zeichen darstellbar sind.

Wenn deine Script "nicht UTF-8" sind, was sind sie dann? Vermutlich Latin1 (Windows-1252), denn eine Kodierung ist immer vorhanden. Du hast dann das Problem, diverse (vielleicht bei dir nur selten vorkommende) Zeichen nicht kodieren zu können, was zu unerwarteten Ergebnissen führen kann. UTF-8 (beziwhungsweise Unicode allgemein) ist dafür vorgesehen, diese Probleme zu lösen, verlangt aber einen einmaligen Umstellungsaufwand, der vielleicht zu Frust aber auch Erfahrungszuwachs führen kann.

echo "$verabschiedung $name";