utf-8/mysql Verständnisfrage

utf-8/mysql Verständnisfrage

am 07.07.2006 11:37:54 von Thomas Grabietz

Hallo Alle,
bitte werft doch mal einen Blick auf folgendes Script.

Fragen:
bin ich in der richtigen group? :-)
wieso zeigt mysql_client_encoding($link) latin1 an?
wieso wird mein INSERT nur im 2. Fall richtig abgespeichert (mit
vorangestelltem _utf8)?
Wie erreiche ich, dass es immer richtig abgespeichert wird?

#$charset="iso-8859-1";
$charset="utf-8"
?>








print "Sie können an folgenden Kursen teilnehmen
\n";//Ausgabe OK
print "moźesz uczestniczyć w następujących kursach
\n";//Ausgabe OK

$link=mysql_connect("localhost","root","blafasel");
mysql_select_db("tom__utf8-test");

//Verzweifelungstat!
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'",$link);
mysql_query("SET CHARACTER SET 'utf8'",$link);
mysql_query("ALTER TABLE 'internationalisation' DEFAULT CHARACTER SET 'utf8'
COLLATION 'utf8_general_ci'");


print mysql_client_encoding($link)."
";//Ausgabe latin1 !!!

if($_POST['send'])
{
mysql_query("INSERT INTO internationalisation (de,pl)
VALUES('$_POST[de]','$_POST[pl]')");
mysql_query("INSERT INTO internationalisation (de,pl)
VALUES(_utf8'$_POST[de]',_utf8'$_POST[pl]')");
print mysql_error();
}

$result=mysql_query("SELECT de,pl FROM internationalisation");

while ($data=mysql_fetch_array($result))
{
print $data['de']." ".$data['pl']."
";
}

/** Ausgabe
*Sie können an folgenden Kursen teilnehmen mo?esz uczestniczy? w
*nast?puj?cych kursach
*Sie können an folgenden Kursen teilnehmen moźesz uczestniczyć w
*następujących kursach
*/


?>

accept-charset="UTF-8">

//input ist: Sie können an folgenden
Kursen teilnehmen

// input ist moźesz uczestniczyć w
*następujących kursach



Re: utf-8/mysql Verständnisfrage

am 07.07.2006 16:21:59 von Thomas Grabietz

Thomas Grabietz wrote:


> //Verzweifelungstat!
> mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'",$link);

Da liegt der Fehler scheinbar. Nach verzweifeltem Rumprobieren in

mysql_query("SET NAMES 'utf8'")

geändert. Jetzt läuft es. Aber wieso verstehe ich nicht! phpMyAdmin gibt als
Verbindungstyp uft8 an.

Weiterhin verzweifelt...

ach die DB ist übrigens eine 4.1.15 und es scheint mir, als wenn mein
Problem nichts mit php zu tun hat.

Tom

Re: utf-8/mysql Verständnisfrage

am 09.07.2006 19:37:00 von Kai Ruhnau

Thomas Grabietz wrote:
> Thomas Grabietz wrote:
>
>
>> //Verzweifelungstat!
>> mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'",$link);
>
> Da liegt der Fehler scheinbar. Nach verzweifeltem Rumprobieren in
>
> mysql_query("SET NAMES 'utf8'")

Mach' mal die Anführungsstriche um utf8 weg, die gehören da nicht hin.
Das gilt für _alle_ Statements, die du benutzt hast (also auch ALTER
TABLE, CREATE TABLE, COLLATE, ...)

> geändert. Jetzt läuft es. Aber wieso verstehe ich nicht! phpMyAdmin gibt als
> Verbindungstyp uft8 an.

phpMyAdmin ist nicht gerade dafür bekannt, die
Characterset-Möglichkeiten seit MySQL-4.1 richt zu nutzen und fehlerfrei
umzusetzen.

> Weiterhin verzweifelt...
>
> ach die DB ist übrigens eine 4.1.15 und es scheint mir, als wenn mein
> Problem nichts mit php zu tun hat.

Stimmt.

X-Post und F'up2 de.comp.datenbanken.mysql

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: utf-8/mysql Verständnisfrage

am 09.07.2006 19:37:00 von Kai Ruhnau

Thomas Grabietz wrote:
> Thomas Grabietz wrote:
>
>
>> //Verzweifelungstat!
>> mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'",$link);
>
> Da liegt der Fehler scheinbar. Nach verzweifeltem Rumprobieren in
>
> mysql_query("SET NAMES 'utf8'")

Mach' mal die Anführungsstriche um utf8 weg, die gehören da nicht hin.
Das gilt für _alle_ Statements, die du benutzt hast (also auch ALTER
TABLE, CREATE TABLE, COLLATE, ...)

> geändert. Jetzt läuft es. Aber wieso verstehe ich nicht! phpMyAdmin gibt als
> Verbindungstyp uft8 an.

phpMyAdmin ist nicht gerade dafür bekannt, die
Characterset-Möglichkeiten seit MySQL-4.1 richt zu nutzen und fehlerfrei
umzusetzen.

> Weiterhin verzweifelt...
>
> ach die DB ist übrigens eine 4.1.15 und es scheint mir, als wenn mein
> Problem nichts mit php zu tun hat.

Stimmt.

X-Post und F'up2 de.comp.datenbanken.mysql

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: utf-8/mysql Verständnisfrage

am 09.07.2006 21:18:33 von Carsten Wiedmann

Kai Ruhnau schrieb:

> Thomas Grabietz wrote:
> > Thomas Grabietz wrote:
> > > mysql_query("ALTER TABLE 'internationalisation' DEFAULT CHARACTER SET
> > > 'utf8'COLLATION 'utf8_general_ci'");
> >
> > > //Verzweifelungstat!
> > > mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'",$link);
> >
> > Da liegt der Fehler scheinbar. Nach verzweifeltem Rumprobieren in
> > mysql_query("SET NAMES 'utf8'")
>
> Mach' mal die Anführungsstriche um utf8 weg, die gehören da nicht hin. Das
> gilt für _alle_ Statements, die du benutzt hast (also auch ALTER TABLE,
> CREATE TABLE, COLLATE, ...)

Bei "SET NAMES 'foo' COLLATE 'bar'" kommt der Singlequote durchaus hin. Bei
"CHARACTER SET foo COLLATE bar" allerdings nicht. Bei dem Tabellenbezeichner
(hier "internationalisation") muss es dafür ein Backquote sein: "ALTER TABLE
`internationalisation` ...".

Gruß
Carsten