Kollationen

Kollationen

am 26.03.2006 14:20:23 von Matthias Matker

Hallo zusammen,

in einer größeren Datenbank, die ich seit kurzem betreue, ist ein wildes
Durcheinander, was den Zeichensatz angeht:

Die Datenbank selber steht auf "latin1_german1_ci", die Tabellen sind
einmal "latin1_swedish_ci" und einmal "latin1_german1_ci", eine solche
Mischung ist auch bei den einzelnen Tabellenfelder vorhanden, sprich
manchmal "swedish", manchmal "german1".

Gibt es eine Möglichkeit, alle betroffenen Tabellenfelder, alle Tabellen
und die Datenbank selber auf einen Zeichensatz zu stellen, nämlich
"latin1_german_ci"?

Schonmals Tausend dank.

Aufgrund der verschiedenen Kollationen gibt es fehlerhaft Queries.

Matze

Re: Kollationen

am 26.03.2006 17:07:41 von Axel Schwenke

Matthias Matker wrote:

> in einer größeren Datenbank, die ich seit kurzem betreue, ist ein wildes
> Durcheinander, was den Zeichensatz angeht:
>
> Die Datenbank selber steht auf "latin1_german1_ci", die Tabellen sind
> einmal "latin1_swedish_ci" und einmal "latin1_german1_ci", eine solche
> Mischung ist auch bei den einzelnen Tabellenfelder vorhanden, sprich
> manchmal "swedish", manchmal "german1".

Du verwechselst hier einiges. Datenbanken und Tabellen haben Default-
Collations, die kommen lediglich zu Zuge, wenn man CREATE TABLE oder
ALTER TABLE ... ADD COLUMN ohne explizite Angabe einer Collation für
die neuen Objekte ausführt.

Die Collation (und der zugehörige Zeichensatz) einer Spalte ist hin-
gegen eine zugewiesene Eigenschaft, die jede Spalte unabhängig von den
Defaults des übergeordneten Containers besitzt. Insbesondere führt die
Änderung der Default-Collation z.B. einer Tabelle nicht zur Änderung
der Collations der enthaltenen Spalten.

Außerdem ist der synonyme Gebrauch von "Zeichensatz" und "Collation"
falsch. Während eine Collation immer auch den verwendeten Zeichensatz
bestimmt, kann ein Zeichensatz i.d.R. mehrere Collations haben.

> Gibt es eine Möglichkeit, alle betroffenen Tabellenfelder, alle Tabellen
> und die Datenbank selber auf einen Zeichensatz zu stellen, nämlich
> "latin1_german_ci"?

Da die Daten alle den gleichen Zeichensatz (nämlich latin1) verwenden,
gibt es keine Bedenken, die jeweilige Collation auf latin1_german1_ci
zu setzen. Wie das geht, steht im Handbuch:

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html


XL