MySQL - PHP liefert Texte aus DB als UTF-8

MySQL - PHP liefert Texte aus DB als UTF-8

am 10.06.2007 18:22:09 von Thomas Barth

Hi,
kann mir einer verraten, wo auf dem Weg zur Ausgabe im Internet-Browser
die Texte aus der DB nach UTF-8 umgewandelt werden? Ich habe alles auf
latin1/ISO-8895-1/15 umgestellt und trotzdem können die Umlaute im
Browser (Firefox) nur unter UTF-8 korrekt dargestellt werden. Ich möchte
aber die Texte mit dem in der DB eingestellten Zeichensatz darstellen.

Ich habe mir den Köhntopp-Artikel durchgelesen und alles so eingestellt
http://blog.koehntopp.de/archives/1424-MySQL-Zeichensatz-Gru ndlagen.html

show create database db;
CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE
latin1_german1_ci */

CREATE TABLE `keywords` () ENGINE=MyISAM DEFAULT CHARSET=latin1;

Die Texte mit Umlauten werden zB. im Gnome-Terminal mit der
Zeichenkodierung 8859-15 korrekt angezeigt (mysql -e ... "select * from
table"

Beweist auch:
mysql> select hex("ö");
+----------+
| hex("ö") |
+----------+
| F6 |
+----------+


Warum dann nicht im Browser. Selbst in einer Java-Applikation müsste ich
UTF-8 beim InputStreamReader mitangeben, damit die Umlaute korrekt
ausgegeben werden

URL url = new URL(sURL);
InputStream instream = url.openStream();
InputStreamReader inputStreamReader = new InputStreamReader(instream,
"UTF8");

Also, kurz, obwohl in der DB richtig unter latin1 abgelegt, bekomme ich
die Daten utf-8 kodiert. Wer ist dafür noch verantwortlich? In der
PHP-ini habe ich jedenfalls default_charset = "iso-8859-15" angegeben
und Apache2 neu gestartet.

Gruß,
Thomas B

Re: MySQL - PHP liefert Texte aus DB als UTF-8

am 11.06.2007 09:08:48 von Thomas Barth

Thomas Barth wrote:
[Probleme mit Zeichensätzen]

Es hat sich erledigt. Bei meiner allwöchentlichen Systemaktualisierung
wurde auch eine neue MySQL-Version installiert (5.0.42), bei der auch
die PHP-MySQL-Bibliothek mit kompiliert wurde (Gentoo). Bei der
Systemaktualisierung hat das System die neu eingestellten locales
berücksichtigt. Nun ist alles so, wie es sein soll.

Gruß,
Thomas B

Re: MySQL - PHP liefert Texte aus DB als UTF-8

am 11.06.2007 13:34:02 von Joerg Behrens

Thomas Barth schrieb:
> Thomas Barth wrote:
> [Probleme mit Zeichensätzen]
>
> Es hat sich erledigt. Bei meiner allwöchentlichen Systemaktualisierung
> wurde auch eine neue MySQL-Version installiert (5.0.42), bei der auch
> die PHP-MySQL-Bibliothek mit kompiliert wurde (Gentoo). Bei der
> Systemaktualisierung hat das System die neu eingestellten locales
> berücksichtigt. Nun ist alles so, wie es sein soll.


Gentoo ist eine oder die einzige Distribution wo MySQL mit UTF8
konfiguriert per Default wird. Wenn man das nicht will setzt man das
entsprechende USE-FLAG was es extra dafuer gibt.

Aber eigentlich ist es doch egal was fuer ein Default der Server
benutzt.... solange man bei jeder Aktion ihm sagt welchen Charset man
gerade benutzt?

Oder ist beim einfuegen ueber die Console irrtuemlicherweise etwas mit
dem falschen Charset in die Tabellen gelangt?

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de

Re: MySQL - PHP liefert Texte aus DB als UTF-8

am 11.06.2007 20:30:21 von Thomas Barth

Joerg Behrens wrote:
> Thomas Barth schrieb:
>> Thomas Barth wrote:
>> [Probleme mit Zeichensätzen]
>>
>> Es hat sich erledigt. Bei meiner allwöchentlichen Systemaktualisierung
>> wurde auch eine neue MySQL-Version installiert (5.0.42), bei der auch
>> die PHP-MySQL-Bibliothek mit kompiliert wurde (Gentoo). Bei der
>> Systemaktualisierung hat das System die neu eingestellten locales
>> berücksichtigt. Nun ist alles so, wie es sein soll.
>
>
> Gentoo ist eine oder die einzige Distribution wo MySQL mit UTF8
> konfiguriert per Default wird. Wenn man das nicht will setzt man das
> entsprechende USE-FLAG was es extra dafuer gibt.
>

Ich weiß ;-) echo "dev-db/mysql latin1" >> /etc/portage/package.use und
remergen. Oder eben von Hand in der my.cnf alles auf latin1 setzen. Da
es aber eine neue MySQL-Version gegeben hat, Neuinstallation mit USE-Flag.

> Aber eigentlich ist es doch egal was fuer ein Default der Server
> benutzt.... solange man bei jeder Aktion ihm sagt welchen Charset man
> gerade benutzt?
>

Ich hatte PHP in der PHP-ini den Standardzeichensatz mitgeteilt und
trotzdem wurde versucht, Texte UTF-8 kodiert abzuspeichern.

> Oder ist beim einfuegen ueber die Console irrtuemlicherweise etwas mit
> dem falschen Charset in die Tabellen gelangt?
>

Nein, in der Konsole war alles in Ordnung. Unter 8859-15 bekam ich alle
Texte mit Umlauten korrekt angezeigt. Es muss an der PHP-MySQL-Bibliothek
gelegen haben, die mit den locales UTF-8 kompiliert wurde. Bei der
Intallation der neuen Version wurde die Biobliothek mit den locales für
8859-15 kompiliert und seitdem gibt es keine Probleme mehr.

Gruß,
Thomas B