Aktueller Standort: Startseite> Neueste Artikel> Die Charaktercodierung ist nicht festgelegt, was zu verstümmelten Ergebnissen führt

Die Charaktercodierung ist nicht festgelegt, was zu verstümmelten Ergebnissen führt

M66 2025-05-31

Bei Verwendung der MySQL -Datenbank in PHP stoßen Sie häufig auf das Problem des verstümmelten Codes in den von der MySQLI_Result -Funktion zurückgegebenen Abfrageergebnissen. Normalerweise wird das verstümmelte Problem durch die Charakter -Codierung verursacht, die nicht korrekt eingestellt wird. In diesem Artikel wird erklärt, warum die nicht festgelegte Charaktercodierung verstümmelte Abfragenergebnisse verursacht und Lösungen liefert.

1. Was ist Charaktercodierung?

Die Charaktercodierung ist die Art und Weise, wie Zeichen in einem Computer gespeichert und dargestellt werden. Die Zeichensätze jeder Sprache müssen eindeutig codiert werden, um korrekt angezeigt zu werden. Beispielsweise ist die UTF-8-Codierung ein weit verbreiteter Zeichensatz, der Zeichen in einer Vielzahl von Sprachen unterstützen kann. Wenn die Charaktercodierung inkonsistent ist, kann das System den Text nicht korrekt identifizieren und anzeigen, was zu verstümmelten Code führt.

2. Mysql und Charaktercodierung

In der MySQL -Datenbank können jede Datenbank, Tabelle, Feld und Verbindung eine eigene Zeichencodierung haben. Wenn die Charaktercodierung der Datenbankverbindung mit der Zeichencodierung der Datenbank oder Tabelle nicht übereinstimmt, können verstümmelte Probleme auftreten.

Wenn wir die Funktion mySQLI_Result verwenden, um die Abfrageergebnisse zu erhalten, ist der Standardzeichensatz von MySQL möglicherweise nicht der Zeichensatz, den wir erwarten. Insbesondere ist der verstümmelte Code anfällig für das Auftreten, wenn der Zeichensatz der Datenbank und Tabelle nicht korrekt eingestellt ist oder der Zeichensatz der Datenbankverbindung nicht korrekt eingestellt ist.

3. Wie die Funktion mySqli_result funktioniert

Mysqli_Result ist eine Funktion in PHP, um die Ergebnisse der MySQL -Abfrage zu erhalten. Wenn wir MySQLI_Query verwenden, um SQL -Abfrage auszuführen, gibt es ein mySQLi_Result -Objekt zurück. Dann können wir Fetch_assoc () , fetch_row () und andere Methoden im Objekt verwenden, um die Abfrageergebnisse zu erhalten.

Zum Beispiel:

 $conn = mysqli_connect('localhost', 'username', 'password', 'database');
$result = mysqli_query($conn, "SELECT * FROM users");

while($row = mysqli_fetch_assoc($result)) {
    echo $row['name'];
}

In dem obigen Code, unter der Annahme, dass der Feldname des Abfrageergebnisses chinesische Zeichen enthält, können die chinesischen Zeichen im Abfrageergebnis verstümmelt sein, wenn die Zeichenkodierung nicht korrekt eingestellt ist.

4. Warum wird nicht auf Zeichenkodierung eingestellt, was zu verstümmelten Code führt?

Standardmäßig wird der Zeichensatz von MySQL -Verbindungen durch die Konfiguration des MySQL -Servers bestimmt. Wenn der Zeichensatz des MySQL -Servers nicht mit der von uns verarbeitenden Datencodierung übereinstimmt, können die Zeichen im Abfrageergebnis falsch dekodiert werden, was zu verstümmelten Code führt.

Angenommen, wir speichern chinesische Zeichen in der MySQL-Datenbank und der Zeichensatz der Tabelle ist UTF-8. Wenn das PHP-Skript jedoch Latin1 (d. H. ISO-8859-1) verwendet, wenn sie eine Verbindung zur Datenbank herstellen, werden die von der Datenbank zurückgegebenen Daten in der Latin1-Codierung und nicht in UTF-8 dekodiert. Da die beiden Codes unterschiedlich sind, erscheinen die zurückgegebenen chinesischen Zeichen verstümmelt.

5. Wie kann man das Problem des verstümmelten Code lösen?

Um das Problem der Charaktercodierung zu lösen, müssen wir sicherstellen, dass die korrekte Zeichenkodierung festgelegt wird, wenn die Datenbankverbindung verbunden ist. Die Charaktercodierung kann auf folgende Weise festgelegt werden:

Setzen Sie die Verknüpfungszeichenkodierung

Verwenden Sie nach der Erstellung einer Datenbankverbindung die Funktion mySQLI_Set_charset () , um die Zeichencodierung festzulegen:

 $conn = mysqli_connect('localhost', 'username', 'password', 'database');
mysqli_set_charset($conn, 'utf8'); // Setzen Sie die Zeichenkodierung aufUTF-8

Dies stellt sicher, dass die Datenbankverbindung mit UTF-8-Zeichen codiert wird, wodurch verstümmelte Probleme vermieden werden.

Überprüfen Sie die Charaktercodierung von Datenbanken und Tabellen

Wir müssen auch sicherstellen, dass die Zeichenkodierung der Datenbank und Tabellen auch auf UTF-8 eingestellt ist. Die Zeichensätze von Datenbanken und Tabellen können durch die folgenden SQL -Anweisungen überprüft und geändert werden:

  1. Zeigen Sie den Datenbankzeichen an:

 SHOW CREATE DATABASE database_name;
  1. Ändern Sie den Datenbankzeichensatz:

 ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
  1. Zeigen Sie den Zeichensatz der Tabelle an:

 SHOW TABLE STATUS FROM database_name;
  1. Ändern Sie den Zeichensatz der Tabelle:

 ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Setzen Sie die Client -Zeichenkodierung

In einigen Fällen kann es auch erforderlich sein, den Client -Zeichen festzulegen, indem die folgende SQL -Anweisung ausgeführt wird:

 SET NAMES 'utf8';

Dies stellt sicher, dass die Zeichenkodierung zwischen dem Client und dem MySQL -Server bei Ausführung der Abfrage konsistent ist.

6. Zusammenfassung

Das verstümmelte Problem wird normalerweise durch inkonsistente Charakter -Codierungseinstellungen verursacht, insbesondere wenn die Funktion mySQLI_Result verwendet wird, um Abfrageergebnisse zu erhalten. Wenn die Charaktercodierung nicht korrekt eingestellt wird, verwendet MySQL den Standardzeichensatz (normalerweise Latin1), was zu verstümmelten Abfrageergebnissen führt. Um dieses Problem zu vermeiden, sollten Sie sicherstellen:

  1. Stellen Sie die korrekte Zeichenkodierung (z. B. UTF-8) bei der Verbindung mit der Datenbank fest.

  2. Stellen Sie sicher, dass die Zeichensätze der Datenbank, Tabelle und Client konsistent sind.

  3. Wenn Sie weiterhin auf Probleme stoßen, können Sie versuchen, festgelegte Namen 'UTF8' festzulegen, um die Konsistenz der Charaktercodierung zu gewährleisten.

Mit diesen Methoden können die Abfrageergebnisse effektiv vermieden werden und der Kreis von verstümmeltem Code kann sichergestellt werden, dass die Daten korrekt angezeigt werden.