Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sonderzeichen in PHP / MySQL

Ich möchte nur einige weitere Details zu der von vartec Dies ist (abhängig von Ihrer MySQL-Installation) die richtige Lösung für Ihr Problem. Zunächst einmal ist das Problem mit dem Zeichensatz / der Codierung in MySQL ein etwas komplexes Thema, das im MySQL-Handbuch Kapitel 9.1 "Zeichensatzunterstützung" . In Ihrem Fall besonders 9.1.4. "Verbindungszeichensätze und Sortierungen" wird am relevantesten sein.

Um es kurz zu machen:MySQL muss wissen, welchen Zeichensatz / Kodierung Ihre Client-Anwendung (aus der Datenbankperspektive ist das Ihr PHP-Skript) erwartet, da es alle String-Daten aus dem internen Zeichensatz / Kodierung transkodiert, die auf dem Server definiert sind. Datenbank-, Tabellen- oder Spaltenebene in den Zeichensatz / die Kodierung der Verbindung. Sie verwenden UTF-8 auf der Client-Seite, also müssen Sie MySQL mitteilen, dass Sie UTF-8 verwenden. Dies geschieht durch den MySQL-Befehl SET NAMES 'utf8' die beim Verbindungsaufbau als erste Anfrage gesendet werden müssen. Abhängig von Ihrer Installation und der MySQL-Clientbibliothek, die Sie im PHP-Skript verwenden, kann dies automatisch bei jeder Verbindung erfolgen.

Wenn Sie PDO verwenden, müssen Sie lediglich einen Konfigurationsparameter setzen

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Mit mysqli ist es sogar noch einfacher, den Client-Zeichensatz / die Codierung zu ändern:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Ich hoffe, das hilft, das Ganze verständlicher zu machen.