phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

MySQL gibt die westliche Codierung in einer UTF-8-PHP-Datei aus

Verwenden Sie mysqli_set_charset So ändern Sie die Client-Kodierung direkt nach dem Herstellen der Verbindung in UTF-8:

$mysqli->set_charset("utf8");

Die Clientcodierung ist das, was MySql von Ihrer Eingabe erwartet (z. B. wenn Sie vom Benutzer bereitgestellten Text in eine Suchabfrage einfügen) und in dem es Ihnen die Ergebnisse liefert (also muss es mit Ihrer Ausgabecodierung übereinstimmen, damit echo Dinge korrekt anzuzeigen).

Sie muss mit der Codierung Ihrer Webseite übereinstimmen, um die beiden obigen Szenarien und zu berücksichtigen die Codierung der PHP-Quelldatei (damit die hartcodierten Teile Ihrer Abfragen richtig interpretiert werden).

Update:So konvertieren Sie Daten, die mit latin-1 in utf-8 eingefügt wurden

Bei Daten, die bereits mit der falschen Verbindungskodierung eingefügt wurden, gibt es eine bequeme Lösung, um das Problem zu beheben. Für jede Spalte, die diese Art von Daten enthält, müssen Sie Folgendes tun:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

Die Platzhalter table_name , column_name und existing_column_type sollten jedes Mal durch die korrekten Werte aus Ihrer Datenbank ersetzt werden.

Was dies bewirkt, ist

  1. Sagen Sie MySQL, dass es Daten in dieser Spalte in latin1 speichern muss. Dieser Zeichensatz enthält nur eine kleine Teilmenge von utf8, sodass diese Konvertierung im Allgemeinen mit Datenverlust verbunden ist, aber in diesem speziellen Szenario wurden die Daten bereits bei der Eingabe als latin1 interpretiert, sodass es keine Nebenwirkungen gibt. MySql konvertiert jedoch intern die Byte-Darstellung Ihrer Daten so, dass sie mit dem übereinstimmen, was ursprünglich von PHP gesendet wurde.
  2. Konvertieren Sie die Spalte in einen binären Typ (BLOB ), dem keine Codierungsinformationen zugeordnet sind. An diesem Punkt enthält die Spalte rohe Bytes, die eine richtige utf8-Zeichenfolge sind.
  3. Konvertieren Sie die Spalte in ihren vorherigen Zeichentyp und teilen Sie MySql mit, dass die rohen Bytes als in utf8-Codierung betrachtet werden sollten.

WARNUNG:Sie können diesen unterschiedslosen Ansatz nur verwenden, wenn die betreffende Spalte nur enthält falsch eingefügte Daten. Alle korrekt eingefügten Daten werden beim ersten Vorkommen eines Nicht-ASCII-Zeichens abgeschnitten!

Daher ist es eine gute Idee, dies jetzt zu tun, bevor der PHP-seitige Fix in Kraft tritt.