Ich sehe oft etwas Ähnliches in PHP-Skripten, die MySQL verwenden
query("SET NAMES utf8");
Ich musste dies noch nie für ein Projekt tun, daher habe ich ein paar grundlegende Fragen dazu.
- Wird dies nur mit PDO durchgeführt?
- Wenn es sich nicht um eine gU-spezifische Sache handelt, wozu dient sie dann? Mir ist klar, dass die Codierung für MySQL festgelegt wird, aber ich meine, ich musste sie nie verwenden. Warum sollte ich sie verwenden wollen?
Antworten:
Es wird immer dann benötigt, wenn Sie Daten mit Zeichen an den Server senden möchten, die in reinem ASCII nicht dargestellt werden können, z. B. 'ñ' oder 'ö'.
Dies ist der Fall, wenn die MySQL-Instanz nicht so konfiguriert ist, dass standardmäßig eine UTF-8-Codierung von Clientverbindungen erwartet wird (viele sind abhängig von Ihrem Standort und Ihrer Plattform).
Lesen Sie http://www.joelonsoftware.com/articles/Unicode.html, falls Sie nicht wissen, wie Unicode funktioniert.
Lesen Sie, ob Sie "SET NAMES" verwenden möchten, um Alternativen zu SET NAMES anzuzeigen und worum es genau geht.
quelle
SET NAMES UTF8
für sie brauchen ?SELECT
Anweisung.Aus dem Handbuch :
Ausgefeilter (und noch einmal unentgeltlich aus dem Handbuch ):
quelle
Die richtige Codierung ist wirklich schwierig - es gibt zu viele Ebenen:
Der SQL-Befehl "SET CHARSET utf8" von PHP stellt sicher, dass die Clientseite (PHP) die Daten in utf8 erhält, unabhängig davon, wie sie in der Datenbank gespeichert sind. Natürlich müssen sie zuerst korrekt gespeichert werden.
DDL-Definition vs. reale Daten
Die für eine Tabelle / Spalte definierte Codierung bedeutet nicht wirklich, dass sich die Daten in dieser Codierung befinden. Wenn Sie zufällig eine Tabelle definiert haben, die
utf8
jedoch als unterschiedliche Codierung gespeichert ist, behandelt MySQL sie alsutf8
und Sie haben Probleme. Das heißt, Sie müssen dies zuerst beheben.Was zu überprüfen
Sie müssen überprüfen, welche Codierung der Datenfluss auf jeder Ebene ist.
Sie sicher, dass überall der richtige ist.
Umwandlung
Wenn Sie z. B. Daten empfangen
windows-1250
und in speichern möchtenutf-8
, verwenden Sie diese SQL vor dem Speichern:Wenn Sie Daten in DB als haben
windows-1250
und abrufen möchtenutf8
, verwenden Sie:Noch ein paar Anmerkungen:
quelle
Diese Abfrage sollte vor der Abfrage geschrieben werden, die Daten in der Datenbank erstellt oder aktualisiert. Diese Abfrage sieht folgendermaßen aus:
Beachten Sie, dass Sie die Codierung, die Sie verwenden, in den Header schreiben sollten. Wenn Sie beispielsweise utf-8 verwenden, fügen Sie sie wie folgt in den Header ein, da sonst ein Problem mit Internet Explorer auftritt
Ihre Seite sieht also so aus
quelle
Die Lösung ist
quelle
Verwenden Sie stattdessen die PHP-Funktion mysqli :: set_charset mysqli_set_charset, anstatt dies über eine SQL-Abfrage zu tun
von http://www.php.net/manual/en/mysqli.set-charset.php
quelle
Danke @all!
nicht verwenden: query ("SET NAMES utf8"); Dies ist Setup-Zeug und keine Abfrage. Stellen Sie es richtig, nachdem eine Verbindung mit setCharset () (oder einer ähnlichen Methode) gestartet wurde.
ein kleines Ding in Parctice:
Status:
Das Speichern und Lesen von Daten ist kein Problem, solange MySQL mit den Zeichen umgehen kann. Wenn Sie in die Datenbank schauen, werden Sie bereits sehen, dass es Mist darin gibt (zB phpmyadmin).
bis jetzt ist das kein problem! (falsch aber funktioniert oft (in europa)) ..
..wenn kein anderer Client / Programm oder eine geänderte Bibliothek, die ordnungsgemäß funktioniert, Daten liest / speichert. dann bist du in großen Schwierigkeiten!
quelle
Nicht nur PDO. Wenn SQL wie '????' Symbole, Voreinstellung Ihres Zeichensatzes (hoffentlich UTF-8) wirklich empfohlen:
oder über den Prozedurstil
mysqli_set_charset($db,"utf8")
quelle