MySQL und UTF-8

Und alles was mit phpMyAdmin seine Verwandtschaft findet hat hier seinen Platz.

MySQL und UTF-8

Postby youngalcapone » 27. September 2005 09:34

Aloha!
Ich habe ein Problem mit einer UTF-8 codierten Seite, deren Inhalt aus einer Datenbank erzeugt wird.
Und zwar werden die Sonderzeichen als ? dargestellt...
In der Datenbank (gesehen mit phpMyAdmin) schaut alles richtig aus.
Ich weiss, dass ich dieses Problem einfach mit utf8_encode() lösen könnte.
Aber das ist meines Erachtens eher Symptonbekämpfung.
Auch will ich die Sondereichen nicht maskieren, sonst könnte ich ja auch grad wieder Latin 1 nehmen.
Wie definiere ich also global eine Datenbank in utf8?

Weiss da jemand Rat?
Gruss, DAVE
youngalcapone
 
Posts: 13
Joined: 24. August 2005 19:03

Postby Wiedmann » 27. September 2005 09:47

Wie definiere ich also global eine Datenbank in utf8?

In dem du das beim Erstellen der DB mit angibst?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby youngalcapone » 27. September 2005 09:57

Das hab ich natürlich gemacht!
Bei den Datenfeldern ebenso...

Dieser Code gibt dann aber komischerweise immer noch Latin 1 aus:
Code: Select all
<?php
$link = mysql_connect('localhost', 'root', '');
$charset = mysql_client_encoding($link);
printf("Benutzer Zeichensatz ist %s\n", $charset);
?>
youngalcapone
 
Posts: 13
Joined: 24. August 2005 19:03

Postby Wiedmann » 27. September 2005 10:10

Das hab ich natürlich gemacht!

Dann sag das doch... ;-)

Dieser Code gibt dann aber komischerweise immer noch Latin 1 aus:

Nur weil eine Datenbank in utf-8 ist, muss die Kommunikation nicht in utf-8 ablaufen. Du könntest direkt nach dem mysql_connect() folgendes machen:
Code: Select all
mysql_query("SET NAMES 'utf8'", $link);
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby youngalcapone » 27. September 2005 10:21

Besten Dank!
Meinst du so?

Code: Select all
mysql_connect('localhost', 'root', '');
mysql_query("SET NAMES 'utf8'", $link);
mysql_select_db('seiten');


Für was steht die $link-Variable?
Durch was muss ich die wohl ersetzen?
Ich greiffe nachher so zweimal auf die Datenbank zu:

Code: Select all
$row = mysql_fetch_assoc(mysql_query("SELECT `grundgeruest` FROM `grundgeruest` WHERE `sprache` = '".LANG."'")) or die(mysql_error());

$q = mysql_query("SELECT titel, inhalt FROM `inhalt_".LANG."` WHERE `name` = '".NAME."'");


Kann man eigentlich auch einstellen dass die Kommunikation zur Datenbank den Zeichensatz wählt den ich in den Datenfeldern eingegeben habe?
youngalcapone
 
Posts: 13
Joined: 24. August 2005 19:03

Postby Wiedmann » 27. September 2005 10:27

Für was steht die $link-Variable?

Die hast du doch in deinem ersten Codebeispiel selber benutzt?

Durch was muss ich die wohl ersetzen?

Je nach dem wie du die beim Connect nennst, oder weglassen.

Ich greiffe nachher so zweimal auf die Datenbank zu:

Wenn du die NAMES nach dem Connect setzt, sind die gültig bis zu einem neuem Connect.

Kann man eigentlich auch einstellen dass die Kommunikation zur Datenbank den Zeichensatz wählt den ich in den Datenfeldern eingegeben habe?

Nein. Das müsstest du in deinem Script ermitteln. Wenn du nur mit utf8 arbeitest, könntest du aber den ganzen Server in der "my.cnf" auf utf8 umstellen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby youngalcapone » 27. September 2005 10:42

Geil! Danke, es klappt endlich!

Zum in die Datenbank schreiben muss ich dann Zeichensatzspezifisch nichts besonders mehr beachten, oder?

Wenn du nur mit utf8 arbeitest, könntest du aber den ganzen Server in der "my.cnf" auf utf8 umstellen.


Das werd ich jetzt wohl auch noch machen.
youngalcapone
 
Posts: 13
Joined: 24. August 2005 19:03


Return to phpMyAdmin

Who is online

Users browsing this forum: No registered users and 2 guests