Heim > Artikel > Backend-Entwicklung > Wie löst PHP verstümmelte chinesische Zeichen beim Abfragen einer MySQL-Datenbank?
Wie löst PHP verstümmelte chinesische Zeichen bei der Abfrage einer MySQL-Datenbank?
1. Die Standardkodierung der MySQL-Datenbank ist UTF-8;
3. Stellen Sie vor der Datenabfrage in PHP die Datenbankkodierung auf UTF-8 ein.
MySQL „SET NAMES x“-Zeichensatzproblemanalyse
Kürzlich von BBT geschult, um ein Abstimmungssystem aufzubauen. Der Systemcode ist nicht schwierig, aber ich habe meine Zeit hauptsächlich damit verbracht, Zeichensätze und Kodierungen zu studieren. Die Kodierungsprobleme (Zeichensatzprobleme) der beiden Systeme MySQL und Apache haben mir den Kopf zerbrochen und sehr gelitten. Die Lösungen für diese Probleme im Internet sind verstreut und einseitig. Die meisten von ihnen bieten Lösungen, ohne zu erklären, warum. Deshalb werde ich zusammenfassen, was ich in den letzten Tagen gewonnen habe, um zu vermeiden, dass Nachzügler weitere Umwege machen. Dieser Artikel ist ein wenig hilfreich für das PHP-Schreiben (nachdem Sie ihn gelesen haben, wissen Sie, wie Sie dafür sorgen, dass Ihr PHP-Programm auf den Servern der meisten Space-Anbieter normal angezeigt wird), aber mehr Hilfe liegt in der Einrichtung und den Einstellungen des Netzwerkservers.
Lassen Sie uns zunächst über den Zeichensatz von MySQL sprechen. Unter Windows können Sie den Standardzeichensatz der Datenbank ändern, indem Sie die beiden Felder# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8in my.ini ändern. Der erste ist der Standardzeichensatz des Clients und der zweite ist der Standardzeichensatz des Servers. Angenommen, wir setzen beide auf utf8 und geben dann „show variebles like „character_set_%“;“ in den MySQL-Befehlszeilenclient ein. Sie können die folgenden Zeichen sehen:
character_set_client latin1 character_set_connection latin1 character_set_database utf8 character_set_results latin1 character_set_server utf8 character_set_system utf8Das utf8 folgt unserer obigen Einstellung. Wenn wir derzeit Daten aus der Datenbank über ein PHP-Programm mit UTF-8 lesen, handelt es sich wahrscheinlich um eine Zeichenfolge mit „?????“ oder anderen verstümmelten Zeichen. Nach einer langen Online-Suche ist die Lösung einfach. Nachdem Sie eine Verbindung zur Datenbank hergestellt haben, führen Sie vor dem Lesen der Daten zunächst eine Abfrage „SET NAMES UTF8“ aus, d normal sein (solange die Datenbank die Zeichen in den Informationen normal sind). Warum passiert das? Was genau macht die Abfrage „SET NAMES UTF8“? Gehen Sie zur MySQL-Befehlszeile und geben Sie „SET NAMES UTF8;“ ein, führen Sie dann „show variebles like „character_set_%“;“ aus und stellen Sie fest, dass die Variablen „character_set_client“, „character_set_connection“ und „character_set_results“ vorhanden sind waren ursprünglich latin1 Alle Werte wurden in utf8 geändert. Es stellt sich heraus, dass diese drei Variablen Probleme verursachen. Konsultieren Sie das Handbuch, der obige Satz entspricht:
mysql_query("SET NAMES UTF8");Sehen Sie sich die Funktionen dieser drei Variablen an: Informationseingabepfad: Client→Verbindung→Server Informationen Ausgabepfad: Server→Verbindung→Ergebnisse. Mit anderen Worten, jeder Pfad muss die Zeichensatzkodierung dreimal ändern. Nehmen Sie als Beispiel die verstümmelte Ausgabe. Für die utf8-Daten auf dem Server wird die eingehende Verbindung in latin1 konvertiert, die eingehenden Ergebnisse werden in latin1 konvertiert und die utf-8-Seite konvertiert die Ergebnisse erneut. Wenn die beiden Zeichensätze nicht kompatibel sind, z. B. latin1 und utf8, ist der Konvertierungsprozess irreversibel und destruktiv. Es kann also nicht mehr zurückgedreht werden. An dieser Stelle sollte jedoch darauf hingewiesen werden, dass die Wirkung von „SET NAMES UTF8“ nur vorübergehend ist und MySQL nach dem Neustart auf die Standardeinstellungen zurückgesetzt wird. Der nächste Schritt besteht darin, über die Konfiguration von MySQL auf dem Server zu sprechen. Müssen wir nicht jedes Mal, wenn wir in die Datenbank lesen und schreiben, „SET NAMES UTF8“ hinzufügen, um sicherzustellen, dass die Codierung der Datenübertragung konsistent ist? Kann ich MySQL so konfigurieren, dass die drei Variablen standardmäßig den gewünschten Zeichensatz verwenden? Im Handbuch steht es nicht, und ich konnte die Antwort online nicht finden. Daher gibt es aus Sicht der Serverkonfiguration keine Möglichkeit, diese Codezeile wegzulassen. Empfohlene Tutorials: „
PHP
“ „MySQL-Tutorial
“Das obige ist der detaillierte Inhalt vonWie löst PHP verstümmelte chinesische Zeichen beim Abfragen einer MySQL-Datenbank?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!