mysql, php, Kollationen und Tschechisch

mysql, php, Kollationen und Tschechisch

am 09.02.2006 03:52:01 von Jan Rademacher

Hallo Ihr werten SQL Profis,
leider hat mir http://dev.mysql.com nicht wirklich weiterehelfen können,
darum habe ich heute folgende Grundsatzfrage:

Ich habe eine sql tabelle "hilfe"

hilfe
id | de | en | cz
---+----+----+---

Nun weiss ich ums verrecken nicht, wie man das am besten angeht.
ich habe die cz spalte mit collation utf8_czech_ci versehen (sagt man
das so?)
Jedenfalls habe ich ein einfaches phpeingabeformular, mit drei textareas
de, en und cz

Wenn ich die db nun fülle, enstehen viele Sonderzeichen:
Kalender -> Kalendář

Nun meine Fragen:
-Ist das ok so, oder sollte ich eine andere Collation wählen?
-Muss/sollte ich bei der EINgabe der Daten etwas beachten ausser
addslashes ?
-soll ich besser iso-8859-2 oder utf-8 im html code nehmen ?

Vielen Dank für Eure Hinweise

--
Jan Rademacher

http://www.lockerbleiben.net

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 09:27:15 von Christian Kirsch

Jan Rademacher schrieb:
> Hallo Ihr werten SQL Profis,
> leider hat mir http://dev.mysql.com nicht wirklich weiterehelfen können,
> darum habe ich heute folgende Grundsatzfrage:
>
> Ich habe eine sql tabelle "hilfe"
>
> hilfe
> id | de | en | cz
> ---+----+----+---
>
> Nun weiss ich ums verrecken nicht, wie man das am besten angeht.

Wie man *was* am besten angeht?

> ich habe die cz spalte mit collation utf8_czech_ci versehen (sagt man
> das so?)
> Jedenfalls habe ich ein einfaches phpeingabeformular, mit drei textareas
> de, en und cz
>

PHP ist hier nicht relevant.

> Wenn ich die db nun fülle, enstehen viele Sonderzeichen:
> Kalender -> Kalendář
>
Das kann ich mir kaum vorstellen. In welchem Encoding soll denn aus
ASCII 'er' plötzlich 'ář' werden? Wie wäre es, wenn Du einfach
mal mit mysql (dem Kommandozeilenclient) das tust, was Dein PHP-Script
tun soll und dann sowohl das SQL-Statement als auch die Ausgabe(n) von
mysql postest?

> Nun meine Fragen:
> -Ist das ok so, oder sollte ich eine andere Collation wählen?

Was ist ok? Solange Du nicht sagst, was Du erreichen willst, kann man
nicht beurteilen, ob irgendwas 'korrekt' ist. Ich kann Dir jedenfalls
verraten, dass eine Collation *nichts* mit der Codierung zu tun hat
(abgesehen davon, dass bestimmte Collations nur mit bestimmten
Codierungen funktionieren). Collations beschäftigen sich mit der
Sortierung.

> -Muss/sollte ich bei der EINgabe der Daten etwas beachten ausser
> addslashes ?

Keine Ahnung. PHP ist hier nicht on-topic, addslashes sagt mir nix.

> -soll ich besser iso-8859-2 oder utf-8 im html code nehmen ?

HTML ist hier nicht on-topic. Ob Du 8859-2 oder utf-8 benutzen
möchtest, hängt von dem Problem ab, das Du lösen willst. Da Du das
nicht beschreibst, lässt sich die Frage auch nicht vernünftig
beantworten.
Wenn Du ohnehin weißt, dass in 'de' nur Latin-1, in 'en' nur ASCII und
in 'cz' nur Latin-2 vorkommen, kannst Du vielleicht für diese Spalten
jeweils diese Codierungen benutzen. *Vielleicht* - denn wenn Du bspw.
Vergleiche *zwischen* den Spalten durchführen willst, wirst Du um
Unicode nicht herumkommen. Ebenso wenig, wenn in 'cz' auch griechische
oder deutsche Zeichen vorkommen.

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 11:57:58 von Jan Rademacher

Christian Kirsch schrieb:
> Wie man *was* am besten angeht?

Naja, ich möchte mittels php in einem Formular deutsche, englische und
tschechische Wörter/Sätze in die mysql db einfügen und auf einer
homepage wieder ausgeben. Die homepage soll in drei Sprachen sichtbar
sein. (nicht gleichzeitig, natürlich ;) )
>
> PHP ist hier nicht relevant.
>
Naja, in de.comp.php würden Sie mir sagen, mysql sei nicht relevant,
beides wird nun aber leider sehr oft in Kombination bentutz, weswegen
ich hiermit um Nachsicht bitte. (Gleiches gilt für html)

>
>>Wenn ich die db nun fülle, enstehen viele Sonderzeichen:
>>Kalender -> Kalendář
>>
>
> Das kann ich mir kaum vorstellen. (...) Wie wäre es, wenn Du einfach
> mal mit mysql (dem Kommandozeilenclient) das tust, was Dein PHP-Script
> tun soll und dann sowohl das SQL-Statement als auch die Ausgabe(n) von
> mysql postest?
Leider bin ich mit dem Kommandozeilenclient nicht vertraut, sorry.

> Wenn Du ohnehin weißt, dass in 'de' nur Latin-1, in 'en' nur ASCII und
> in 'cz' nur Latin-2 vorkommen, kannst Du vielleicht für diese Spalten
> jeweils diese Codierungen benutzen. *Vielleicht* - denn wenn Du bspw.
> Vergleiche *zwischen* den Spalten durchführen willst, wirst Du um
> Unicode nicht herumkommen. Ebenso wenig, wenn in 'cz' auch griechische
> oder deutsche Zeichen vorkommen.

Ok, meine Frage geht wohl auch in die Richtung, ob es ok ist, mit
unicode "zu leben" anstatt auf den "Originalschriftzeichen" zu bestehen.
Wenn bei einer Suchfunktion mittels php trotzdem die richtigen Wörter
gefunden werden, wäre das ja imho ok.

Sorry, dass ich meine Frage nicht so explizit äußern kann, aber
verschiedene Schriftsätze und collation ist halt irgendwie Neuland für mich

lg jan


--
Jan Rademacher

http://www.lockerbleiben.net

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 12:16:27 von Axel Schwenke

Jan Rademacher wrote:
> Hallo Ihr werten SQL Profis,

Schleimer!

> Ich habe eine sql tabelle "hilfe"
>
> hilfe
> id | de | en | cz
> ---+----+----+---

Ich rate jetzt mal ins Blaue: du willst eine PHP-Webapplikation
internationalisieren? Schau dir mal gettext() an. Ist für diesen
Zweck deutlich angemessener als eine SQL-Datenbank.

> ich habe die cz spalte mit collation utf8_czech_ci versehen (sagt man
> das so?)

Nein, das sagt man nicht so. Statt dessen postet man hier die Ausgabe
von SHOW CREATE TABLE ...

> Jedenfalls habe ich ein einfaches phpeingabeformular, mit drei textareas
> de, en und cz

Und damit willst du die Tabelle bearbeiten, richtig?

> Wenn ich die db nun fülle, enstehen viele Sonderzeichen:
> Kalender -> Kalendář

Wenn du in einem Textfeld ein Sonderzeichen eingibst, dann sollte
das auch in der Datenbank landen. Ja.

> Nun meine Fragen:
> -Ist das ok so, oder sollte ich eine andere Collation wählen?
> -soll ich besser iso-8859-2 oder utf-8 im html code nehmen ?

Im Kontext einer internationalisierten Webapplikation ist es wohl
am sinnvollsten, *alles* in UTF8 zu encodieren. Collations werden
benötigt, um nationale Sonderregelungen bezüglich Sortierung und
Stringvergleich (z.B. Schwedisch: 'ü' == 'y') einzuhalten. Für
deinen Zweck sehe ich aber keine Notwendigkeit, eine bestimmte
Collation zu verwenden. Der Vorteil von "alles UTF8" ist natürlich,
daß man nirgendwo mehr umcodieren muß.

> -Muss/sollte ich bei der EINgabe der Daten etwas beachten ausser
> addslashes ?

Du mußt allen beteiligten Seiten mitteilen, daß du UTF8 sprichst
und daß du Daten von ihnen auch in UTF8 erwartest. In Bezug auf
MySQL klärt das Kapitel 10 "Character Set Support" des Handbuchs.
In Richtung zum Browser gibts den "Content-Type" HTTP-Header.
Formulardaten senden Browser üblicherweise im gleichen Encoding
wie das Formular war. Das bedeutet u.A. auch, daß die Daten aus
den "de", "en" und "cz" Textareas *alle* im *gleichen* Encoding
ankommen.


XL

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 12:46:21 von Dirk Brosowski

Jan Rademacher schrieb:
> Christian Kirsch schrieb:
> > Wie man *was* am besten angeht?
>
> Naja, ich möchte mittels php in einem Formular deutsche, englische und
> tschechische Wörter/Sätze in die mysql db einfügen und auf einer
> homepage wieder ausgeben. Die homepage soll in drei Sprachen sichtbar
> sein. (nicht gleichzeitig, natürlich ;) )
>
>>
>> PHP ist hier nicht relevant.
>>
> Naja, in de.comp.php würden Sie mir sagen, mysql sei nicht relevant,
> beides wird nun aber leider sehr oft in Kombination bentutz, weswegen
> ich hiermit um Nachsicht bitte. (Gleiches gilt für html)

php könnte ich ja noch verstehen, aber wieso du meinst html und mysql
haben irgendwas mit einander zu tun, bleibt mir ein Rätsel.
In jedem Fall wäre de.comp.lang.php.datenbanken fast die perfekte
Kombination, oder?

>
>>
>>> Wenn ich die db nun fülle, enstehen viele Sonderzeichen:
>>> Kalender -> Kalendář
>>>
>>
>> Das kann ich mir kaum vorstellen. (...) Wie wäre es, wenn Du einfach
>> mal mit mysql (dem Kommandozeilenclient) das tust, was Dein PHP-Script
>> tun soll und dann sowohl das SQL-Statement als auch die Ausgabe(n) von
>> mysql postest?
>
> Leider bin ich mit dem Kommandozeilenclient nicht vertraut, sorry.

Dann lies die Dokumentation zu dem Client und mach es dann. Das ist
wirklich Kinderkram. Ansonsten suche dir professionelle Hilfe...

>
>> Wenn Du ohnehin weißt, dass in 'de' nur Latin-1, in 'en' nur ASCII und
>> in 'cz' nur Latin-2 vorkommen, kannst Du vielleicht für diese Spalten
>> jeweils diese Codierungen benutzen. *Vielleicht* - denn wenn Du bspw.
>> Vergleiche *zwischen* den Spalten durchführen willst, wirst Du um
>> Unicode nicht herumkommen. Ebenso wenig, wenn in 'cz' auch griechische
>> oder deutsche Zeichen vorkommen.
>
>
> Ok, meine Frage geht wohl auch in die Richtung, ob es ok ist, mit
> unicode "zu leben" anstatt auf den "Originalschriftzeichen" zu bestehen.
> Wenn bei einer Suchfunktion mittels php trotzdem die richtigen Wörter
> gefunden werden, wäre das ja imho ok.

UTF8 kann alle Zeichen speichern, und dann ist es doch nur eine Frage
der Darstellung.

Dein ER-Diagramm finde ich sowieso seltsam. Eine Tabelle mit den
unterschiedlichen Sprachen und eine Tabelle mit den Einträgen in UTF8
und einem Fremdschlüssel auf die Sprachentabelle. Fertig. Dein System
würde eine Änderung an der Datenbank benötigen, wenn eine andere Sprache
dazu kommt. Das ist doch Quark, unnötig kompliziert.

Grüße

Dirk

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 14:01:14 von Jan Rademacher

DANKESCHÖN!
Einige Tipps konnte ich ja nun doch draus ziehen.

Mit Sicherheit wird das Usenet durchaus von professionelleren Usern
vorbehalten als ich es auf diesem Gebite einer bin, dennoch sollte doch
auch ein Newbie die Chance haben, fragen zu stellen, oder?

Ihr habt bestimmt versucht Tipps zu geben, und ich habe meine Frage
anscheinend nicht vernünftig formuliert, dennoch waren einige Antworten
mitunter sowas von "oben herab", dass es einem schwindelig werden könnte!


>Ansonsten suche dir professionelle Hilfe...
Was meinste, warum ich hier bin?

>Dein ER-Diagramm finde ich sowieso seltsam. Eine Tabelle mit den
>unterschiedlichen Sprachen und eine Tabelle mit den Einträgen in UTF8
>und einem Fremdschlüssel auf die Sprachentabelle. Fertig. Dein System
>würde eine Änderung an der Datenbank benötigen, wenn eine andere
>Sprache dazu kommt. Das ist doch Quark, unnötig kompliziert.

Womit Du Recht hast...
Ich werde diesem Vorschlag nachkommen

Schönen Tag noch (-:
Jan

--
Jan Rademacher

http://www.lockerbleiben.net

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 16:07:22 von Axel Schwenke

Jan Rademacher wrote:

[schnipp]

Meine Güte, Usenet kannst du also auch nicht!

Wenn du eine Erwiderung auf Dirks oder Christians Postings hast,
dann schreib dein follow-up auch dazu.


XL

Re: mysql, php, Kollationen und Tschechisch

am 09.02.2006 17:30:52 von Jan Rademacher

Axel Schwenke schrieb:
> Jan Rademacher wrote:
>
> [schnipp]
>
> Meine Güte, Usenet kannst du also auch nicht!
>
> Wenn du eine Erwiderung auf Dirks oder Christians Postings hast,
> dann schreib dein follow-up auch dazu.
>
>
> XL

Naja, immerhin bezog sich das DANKESCHÖN speziell auf Deinen Post.
Aber lassen wir das nun :P

ich gelobe ja Besserung

lg
Jan

--
Jan Rademacher

http://www.lockerbleiben.net