utf-8 und deutsche sortierung

utf-8 und deutsche sortierung

am 28.09.2006 13:05:26 von Niels Bobogk

Guten Tag,

gegeben sind:
mysql 4.1.1
php 4
charset utf-8

ich möchte sowohl in der db als auch in der webanwendung und im browser
utf-8 verwenden. gibt es eine möglichkeit, daten aus einer mysql-tabelle,
welche die daten im utf-8-charset speichert, bei der ausgabe korrekt in
latin-1-german zu sortieren? eine zuweisung a lá "DEFAULT CHARSET utf8
COLLATE latin1..." scheitert ja, folglich werden die umlaute an den
"falschen" stellen einsortiert.

Re: utf-8 und deutsche sortierung

am 28.09.2006 13:47:11 von Christian Kirsch

Am 28.09.2006 13:05 schrieb Niels Bobogk:
> Guten Tag,
>
> gegeben sind:
> mysql 4.1.1
> php 4
> charset utf-8
>
> ich möchte sowohl in der db als auch in der webanwendung und im browser
> utf-8 verwenden. gibt es eine möglichkeit, daten aus einer mysql-tabelle,
> welche die daten im utf-8-charset speichert, bei der ausgabe korrekt in
> latin-1-german zu sortieren? eine zuweisung a lá "DEFAULT CHARSET utf8
> COLLATE latin1..." scheitert ja, folglich werden die umlaute an den
> "falschen" stellen einsortiert.

Möglicherweise ergibt so ein Unterfangen deshalb keinen Sinn, weil
UTF8 eine Obermenge von Latin1 ist? Anders gesagt: Wie soll das
unglückselige MySQL denn z.B. thailändische oder georgische Wörter
sortieren?

Gegenfrage: *Warum* willst Du UTF-8 verwenden? Weil das modern ist,
oder weil Du tatsächlich Daten in mehreren teilweise disjunkten
Kodierungen speichern musst?

Re: utf-8 und deutsche sortierung

am 28.09.2006 14:08:54 von Carsten Wiedmann

Niels Bobogk schrieb:

> ich möchte sowohl in der db als auch in der webanwendung und im browser
> utf-8 verwenden. gibt es eine möglichkeit, daten aus einer
> mysql-tabelle, welche die daten im utf-8-charset speichert, bei der
> ausgabe korrekt in latin-1-german zu sortieren? eine zuweisung a lá
> "DEFAULT CHARSET utf8 COLLATE latin1..." scheitert ja, folglich werden
> die umlaute an den "falschen" stellen einsortiert.

Also bei der Collation "latin1_german1_ci" sieht es so aus:
| Ä = A
| Ö = O
| Ü = U
| ß = s

Genau die selben Regeln hat man bei der Collation "utf8_general_ci", welche
"normal" die Standardcollation bei utf8 ist. Siehe [1].

Gruß
Carsten

[1] http://dev.mysql.com/doc/refman/4.1/en/charset-unicode-sets. html

Re: utf-8 und deutsche sortierung

am 28.09.2006 16:14:50 von Axel Schwenke

"Niels Bobogk" wrote:
>
> gegeben sind:
> mysql 4.1.1
> php 4
> charset utf-8
>
> ich möchte sowohl in der db als auch in der webanwendung und im browser
> utf-8 verwenden. gibt es eine möglichkeit, daten aus einer mysql-tabelle,
> welche die daten im utf-8-charset speichert, bei der ausgabe korrekt in
> latin-1-german zu sortieren?

Du kannst der ORDER BY Klausel ein COLLATE mitgeben. Da die Collation
aber zum Encoding (Charset) der zu sortierenden Spalte passen muß und
leider keine deutsche Collation für UTF8 existiert, muß du zusätzlich
noch nach latin1 umwandeln. Also z.B. so:

SELECT ...
ORDER BY CONVERT( USING latin1) COLLATE latin1_german2_ci


XL

Re: utf-8 und deutsche sortierung

am 28.09.2006 22:04:02 von Niels Bobogk

Vielen Dank für die Antworten!

Warum ich UTF-8 verwenden will? Nun, wir beschäftigen uns derzeit mit der
Migration von Imperia (CMS) 7 auf Version 8. Dort hat eine vollständige
Umstellung auf UTF-8 stattgefunden, und im Zuge dessen bin ich beauftragt,
eine Machbarkeitsstudie für zukünftige eigene Projekte unserer Firma zu
erstellen. Für mein derzeitiges Projekt isr latin1 ausreichend. Wie
gesagt, nur eine prinzipielle Frage zur Machbarkeit. Ausgangspunkt war
eigentlich, Websites zukünftig XHtml-Standardkonform zu coden und im
default-XML-Zeichensatz auszuliefern, natürlich als xml-application,
wenn's denn der Browser kann.

Okay, nochmals vielen Dank!

Am 28.09.2006, 13:47 Uhr, schrieb Christian Kirsch :

> Am 28.09.2006 13:05 schrieb Niels Bobogk:
>> Guten Tag,
>>
>> gegeben sind:
>> mysql 4.1.1
>> php 4
>> charset utf-8
>>
>> ich möchte sowohl in der db als auch in der webanwendung und im browser
>> utf-8 verwenden. gibt es eine möglichkeit, daten aus einer
>> mysql-tabelle,
>> welche die daten im utf-8-charset speichert, bei der ausgabe korrekt in
>> latin-1-german zu sortieren? eine zuweisung a lá "DEFAULT CHARSET utf8
>> COLLATE latin1..." scheitert ja, folglich werden die umlaute an den
>> "falschen" stellen einsortiert.
>
> Möglicherweise ergibt so ein Unterfangen deshalb keinen Sinn, weil
> UTF8 eine Obermenge von Latin1 ist? Anders gesagt: Wie soll das
> unglückselige MySQL denn z.B. thailändische oder georgische Wörter
> sortieren?
>
> Gegenfrage: *Warum* willst Du UTF-8 verwenden? Weil das modern ist,
> oder weil Du tatsächlich Daten in mehreren teilweise disjunkten
> Kodierungen speichern musst?



--
Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/mail/

Re: utf-8 und deutsche sortierung

am 01.10.2006 21:58:17 von Kris

Niels Bobogk wrote:
> Warum ich UTF-8 verwenden will? Nun, wir beschäftigen uns derzeit mit der
> Migration von Imperia (CMS) 7 auf Version 8. Dort hat eine vollständige
> Umstellung auf UTF-8 stattgefunden, und im Zuge dessen bin ich beauftragt,
> eine Machbarkeitsstudie für zukünftige eigene Projekte unserer Firma zu
> erstellen. Für mein derzeitiges Projekt isr latin1 ausreichend.

Du kannst ohne weiteres mit einem utf8-Client an eine Latin1-Datenbank
gehen. MySQL wandelt die Daten on-the-fly um.

Du kannst auch einfach mit CHARSET utf8 COLLATE utf_general_ci arbeiten. Das
verhält sich für deutsche Texte genau wie latin1_german1_ci.

utf8 braucht aber in manchen Situationen bis zu 3 mal mehr Speicher als
latin1. Daher ist Lösung 1 zu bevorzugen.

Ein VARCHAR(20) braucht in utf8 zwischen 1 und 61 Byte Speicher.
Ein Index auf ein VARCHAR(20) in utf8 braucht 60 Byte Speicher + Row
Pointer.
Ein CHAR(20) in utf8 braucht 60 Byte Speicher.

Codierung der Connection und Codierung der Daten in Tabellen sind wie gesagt
unabhängig voneinander.

Kris