Ich hatte dies zuvor in meiner normalen mysql_ * -Verbindung:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Benötige ich es für die gU? Und wo soll ich es haben?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Antworten:
Sie haben es in Ihrer Verbindungszeichenfolge wie:
Vor PHP 5.3.6 wurde die Zeichensatzoption jedoch ignoriert. Wenn Sie eine ältere Version von PHP verwenden, müssen Sie dies folgendermaßen tun:
quelle
Vor PHP 5.3.6 wurde die Zeichensatzoption ignoriert. Wenn Sie eine ältere Version von PHP verwenden, müssen Sie dies folgendermaßen tun:
quelle
Dies ist wahrscheinlich der eleganteste Weg, dies zu tun.
Direkt im PDO-Konstruktoraufruf, aber unter Vermeidung der fehlerhaften Zeichensatzoption (wie oben erwähnt):
Funktioniert super für mich.
quelle
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
des dsn-Strings funktioniert! Ich habe versucht, das Problem unter groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJDer Vollständigkeit halber gibt es drei Möglichkeiten, die Codierung festzulegen, wenn eine Verbindung zu MySQL über PDO hergestellt wird. Welche verfügbar sind, hängt von Ihrer PHP-Version ab. Die Reihenfolge der Präferenzen wäre:
charset
Parameter in der DSN-ZeichenfolgeSET NAMES utf8
mitPDO::MYSQL_ATTR_INIT_COMMAND
AnschlussmöglichkeitSET NAMES utf8
manuellDieser Beispielcode implementiert alle drei:
Alle drei Aufgaben zu erledigen ist wahrscheinlich übertrieben (es sei denn, Sie schreiben eine Klasse, die Sie verteilen oder wiederverwenden möchten).
quelle
Ich möchte nur hinzufügen, dass Sie sicherstellen müssen, dass Ihre Datenbank mit COLLATE utf8_general_ci oder einer beliebigen Kollatierung erstellt wird. Andernfalls erhalten Sie möglicherweise eine andere als beabsichtigt.
In phpmyadmin können Sie die Sortierung anzeigen, indem Sie auf Ihre Datenbank klicken und Operationen auswählen. Wenn Sie versuchen, Tabellen mit einer anderen Sortierung als Ihrer Datenbank zu erstellen, erhalten Ihre Tabellen ohnehin die Datenbanksortierung.
Stellen Sie daher sicher, dass die Sortierung für Ihre Datenbank korrekt ist, bevor Sie Tabellen erstellen. Hoffe das spart jemandem ein paar Stunden lol
quelle
Ich denke, Sie benötigen eine zusätzliche Abfrage, da die Zeichensatzoption im DSN tatsächlich ignoriert wird. Siehe Link im Kommentar der anderen Antwort.
Schauen Sie sich an, wie Drupal 7 es macht in http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7 :
quelle
quelle
Ich teste diesen Code und
quelle
quelle
$ con = neues PDO ("mysql: host = $ dbhost; dbname = $ database; charset = $ encoding ", "$ dbuser", "$ dbpassword");
quelle