Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Doctrine UTF-8/Zeichensatz Problem

7 views
Skip to first unread message

Andre Schmidt

unread,
Nov 10, 2009, 2:39:58 AM11/10/09
to
Hallo in die Runde,

nachdem mich nach langem Hin-und Her nun doch Doctrine überzeugt hat,
bin ich gerade dabei einige "Kernanwendungen" auf die Nutzung von
Doctrine zu überführen.

Es muss also im Moment so sein, dass ich Doctrine parallel zu meiner
alten Datenbanklösung verwende.

Aber mein Problem ist eigentlich ein ganz anderes:
Doctrine speichert innerhalb der Datenbank nicht in UTF-8!

Dabei ist die Nutzung von UTF-8 ei mir seit langer Zeit so:
Apache2 auf UTF8
MySQL auf UTF8

Und da ich nun die Schemen(.yml) Dateien erstelle, achte ich darauf,
dass bei jeder Tabelle auch brav ein

  options:
    type: INNODB
    collate: utf8_unicode_ci
    charset: utf8

steht.

Nur leider hilft das nicht.

Alle Werte, die ich noch prüfen kann, geben mir ein "UTF-8" als
Kodierung heraus (mb_endcoding_detect()).

Die Prüfung jedoch über PHPMyAdmin offenbart mir die entsprechende
Umlauteproblematik. (Webbrowser ist auf UTF8 eingestellt).

Welche Encodierung ich dort eigentlich finde, weiss ich nicht. Latin-1
ist es auch nicht.

Im Prinzip auch fast kein Problem, wenn nicht meine alten
Datenbankanwendungen auf die Daten z.T. zugreifen und dann in der
Anwendung das Chaos anzeigen. Doctrine macht wenigstens in beide
Richtungen "Mist", logisch.

Nur:
Wie bekomme ich nun Doctrine dazu, die Daten so in der Datenbank zu
speichern (mit dem richtigen Encoding), dass ich die Daten auch über
PHPMyAdmin lesen kann?

Einige Suche im Netz hat mich nicht unbedingt weiter gebracht,
bzw. funktionierten so nicht.

Danke für Hilfe

Gruß
André

Sam Kang

unread,
Nov 10, 2009, 5:31:54 AM11/10/09
to
Andre Schmidt schrieb:

> Nur:
> Wie bekomme ich nun Doctrine dazu, die Daten so in der Datenbank zu
> speichern (mit dem richtigen Encoding), dass ich die Daten auch über
> PHPMyAdmin lesen kann?


$conn = Doctrine_Manager::connection('mysql://user:pass@localhost/test')
$conn->setCharset(’UTF8′);

Meinst du sowas? Ohne setCharset() geht es nicht.

Sam

--
Fortgeschrittene Inkompetenz ist nicht zu Unterscheiden von Boshaftigkeit.
(J. Porter Clark)

Claus Reibenstein

unread,
Nov 10, 2009, 6:08:38 AM11/10/09
to
Sam Kang schrieb:

> $conn->setCharset(’UTF8′);
^ ^

Wohl eher

$conn->setCharset('UTF8');

Gruß. Claus

Andre Schmidt

unread,
Nov 10, 2009, 2:02:27 PM11/10/09
to
Hallo zurück,

Sam Kang wrote:

> $conn = Doctrine_Manager::connection('mysql://user:pass@localhost/test')
> $conn->setCharset(’UTF8′);

Bei mir steht schon alles im Verbindungsaufbau:

$manager = Doctrine_Manager::getInstance();
$manager->openConnection(DSN, 'doctrine');
$manager->setCharset('utf8');
$manager->setCollate('utf8_general_ci');
$manager->setAttribute('model_loading', 'conservative');

Oder fehlt noch etwas?

Gruß
André


Sam Kang

unread,
Nov 10, 2009, 5:38:17 PM11/10/09
to
Andre Schmidt schrieb:

> $manager = Doctrine_Manager::getInstance();
> $manager->openConnection(DSN, 'doctrine');
> $manager->setCharset('utf8');
> $manager->setCollate('utf8_general_ci');
> $manager->setAttribute('model_loading', 'conservative');

Müsste so passen. Ich hatte mal auch so ein Problem mit PHP PDO. Da half nur
ein "SET NAMES utf8 COLLATE utf8_general_ci" um dem Treiber einen Tritt zu
verpassen. Sende das doch mal als "raw" query raus in deiner $manager Instanz

Hier noch ein Thread der sich auch damit befasst.

http://forum.symfony-project.org/index.php/m/82482/

Andre Schmidt

unread,
Nov 11, 2009, 6:35:51 PM11/11/09
to
Sam Kang wrote:

> Müsste so passen. Ich hatte mal auch so ein Problem mit PHP PDO. Da half
> nur ein "SET NAMES utf8 COLLATE utf8_general_ci" um dem Treiber einen
> Tritt zu verpassen. Sende das doch mal als "raw" query raus in deiner
> $manager Instanz

Sorry, ich stehe ein wenig auf dem Schlauch und finde auch nichts nahrhaftes
in der Dokumentation, aber:

Wie übergebe ich einen RAW Query?

Ich habe am Anfang stehen:


$manager = Doctrine_Manager::getInstance();
$manager->openConnection(DSN, 'doctrine');
$manager->setCharset('utf8');
$manager->setCollate('utf8_general_ci');
$manager->setAttribute('model_loading', 'conservative');

Und nun?

In der Doku steht nur was mit "->select()" ...

Was anderes finde ich nicht!

Kurze Hilfe?

Danke und Gruß
André

0 new messages