Lösung für das Problem mit verstümmelten chinesischen Schriftzeichen in MySQL unter Ubuntu

Lösung für das Problem mit verstümmelten chinesischen Schriftzeichen in MySQL unter Ubuntu

Finden Sie das Problem

Ich habe vor Kurzem Django gelernt und bin beim Einfügen von Daten in Verbindung mit MySQL-Daten auf das folgende Problem gestoßen:

/usr/local/lib/python2.7/dist-packages/Django-1.11.dev20170117002028-py2.7.egg/django/db/backends/mysql/base.py:109: Warnung: Falscher String-Wert: '\xE6\x88\x90\xE5\x8A\x9F...' für Spalte 'json' in Zeile 1
 gibt self.cursor.execute(Abfrage, Argumente) zurück
[07/Feb/2017 12:15:21] "GET /index/ HTTP/1.1" 200 250

Chinesisch kann nicht in die MySQL-Datenbank eingefügt werden~! ~!

Datenbankkodierung anzeigen

mysql> anzeigen, Datenbank erstellen, Bangjob;
+----------+---------------------------------------------------------+
| Datenbank | Datenbank erstellen |
+----------+---------------------------------------------------------+
| bangjob | DATENBANK `bangjob` ERSTELLEN /*!40100 STANDARDZEICHENSATZ latin1 */ |
+----------+---------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)
mysql> Variablen wie „%char%“ anzeigen;
+-----------------------------+----------------------------+
| Variablenname | Wert |
+-----------------------------+----------------------------+
| Zeichensatzclient | utf8 |
| Zeichensatzverbindung | utf8 |
| Zeichensatzdatenbank | latin1 |
| Zeichensatz_Dateisystem | Binär |
| Zeichensatzergebnisse | utf8 |
| Zeichensatzserver | latin1 |
| Zeichensatzsystem | utf8 |
| Zeichensatzverzeichnis | /usr/share/mysql/charsets/ |
+-----------------------------+----------------------------+
8 Zeilen im Satz (0,00 Sek.)

Datenbankkodierung ändern

mysql> setze Zeichensatzdatenbank=utf8;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> setze Zeichensatzserver=utf8;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Anzeigen der geänderten Ergebnisse

mysql> Variablen wie „%char%“ anzeigen;
+-----------------------------+----------------------------+
| Variablenname | Wert |
+-----------------------------+----------------------------+
| Zeichensatzclient | utf8 |
| Zeichensatzverbindung | utf8 |
| Zeichensatzdatenbank | utf8 |
| Zeichensatz_Dateisystem | Binär |
| Zeichensatzergebnisse | utf8 |
| Zeichensatzserver | utf8 |
| Zeichensatzsystem | utf8 |
| Zeichensatzverzeichnis | /usr/share/mysql/charsets/ |
+-----------------------------+----------------------------+
8 Zeilen im Satz (0,00 Sek.)

Es besteht zu diesem Zeitpunkt kein Problem, mit dem Einfügen fortzufahren.

Es wäre schön, wenn es so einfach wäre, denn solche Änderungen werden nach einem Neustart von MySQL ungültig! ! !

Suchen Sie weiter nach anderen Methoden

sudo gedit /etc/mysql/my.cnf

Fügen Sie dem entsprechenden Knoten in der Datei my.cnf die folgenden Informationen hinzu:

[Kunde]
Standardzeichensatz = utf8
[mysqld]
Standardzeichensatz = utf8
[mysql]
Standardzeichensatz = utf8

Starten Sie dann MySQL neu:

/etc/init.d/mysql starten

Wenn Sie neu starten können, überprüfen Sie die Datenbankcodierung erneut:

mysql> Variablen wie "%char%" anzeigen;
+-----------------------------+----------------------------+
| Variablenname | Wert |
+-----------------------------+----------------------------+
| Zeichensatzclient | utf8 |
| Zeichensatzverbindung | utf8 |
| Zeichensatzdatenbank | utf8 |
| Zeichensatz_Dateisystem | Binär |
| Zeichensatzergebnisse | utf8 |
| Zeichensatzserver | utf8 |
| Zeichensatzsystem | utf8 |
| Zeichensatzverzeichnis | /usr/share/mysql/charsets/ |
+-----------------------------+----------------------------+
8 Zeilen im Satz (0,01 Sek.)

Es wäre schön, wenn es wirklich so wäre. Die Dinge sind nie so einfach, wie wir es uns vorstellen:

Beim Neustart des MySQL-Dienstes wurde festgestellt, dass er sich immer im Wartezustand befand (PS: Ich vermute, es ist ein Deadlock aufgetreten oder so etwas). Führen Sie zu diesem Zeitpunkt Folgendes aus:

mysql -u root -p

Es wird eine Ausnahme ausgelöst:

FEHLER 2002 (HY000): Verbindung zum lokalen MySQL-Server über Socket '/var/run/mysqld/mysqld.sock' nicht möglich (2)

Ich möchte nur den Code ändern. Warum ist das so schwer?

Ich habe viele Möglichkeiten ausprobiert, um dieses Problem zu lösen (Neustart, Wiederherstellung). . . . .

sudo /etc/init.d/mysql status

Überprüfen Sie den Status von MySQL: mysql respawn/post-start, (post-start) process 55665

Diese Methoden können das Problem nicht lösen, also beginnen wir mit dem Protokoll ...

Suchen Sie die Protokolldatei /var/log/mysql/error.log

Suchen Sie weiter nach einer Lösung für ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) .

Antwort:

[mysqld] Ändern Sie default-character-set=utf8' in character_set_server=utf8

OK, wir können MySQL endlich neu starten und die von uns nach dem Neustart festgelegte Kodierung ist weiterhin wirksam.

Natürlich muss die zuvor erstellte Datenbank neu erstellt werden T_T

Weil show create database bangjob; zeigt, dass die zuvor erstellten Daten immer noch in Latin1 kodiert sind

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Studium oder Ihrer Arbeit hilfreich sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

Das könnte Sie auch interessieren:
  • So lösen Sie das Problem verstümmelter chinesischer Zeichen beim Einfügen von Tabellendaten in MySQL
  • Lösen Sie das Problem verstümmelter chinesischer Zeichen, wenn Sie Daten von Tomcat unter Linux in MySQL einfügen
  • Detaillierte Erläuterung der Lösung für verstümmelte Zeichen, wenn JDBC eine Verbindung zu MySQL herstellt, um Chinesisch zu verarbeiten
  • Detaillierte Erklärung des Problems mit verstümmelten chinesischen Schriftzeichen in der MySQL-Datenbank
  • Lösung für verstümmelte chinesische Schriftzeichen beim Bedienen einer MySQL-Datenbank in CMD
  • So lösen Sie das Problem der chinesischen Verstümmelung, wenn ein Servlet Daten zu MySQL hinzufügt
  • Lösen Sie das Problem verstümmelter chinesischer Schriftzeichen in Mysql5.7
  • Lösung für das Problem verstümmelter chinesischer Zeichen beim Einfügen von Daten in JSP MySQL
  • Lösung für das Problem des chinesischen verstümmelten Codes in der Mac Mysql-Datenbank
  • Lösung für das Problem des verstümmelten chinesischen Codes in der dekomprimierten Version von MySQL

<<:  So leiten Sie über den Nginx-Lastausgleich zu https um

>>:  So erstellen Sie einen untergeordneten Prozess in nodejs

Artikel empfehlen

Vue implementiert einen einfachen Laufschrifteffekt

In diesem Artikel wird der spezifische Code von V...

Wissen Sie, wie Sie das Laden von Webfonts optimieren können?

Genau wie der Titel! Die allgemein verwendete Schr...

Optimierte Aufzeichnung der Verwendung von IN-Datenvolumen in Mysql

Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...

So verwenden Sie den Linux-Befehl tr

01. Befehlsübersicht Der Befehl tr kann Zeichen a...

Unterschiede zwischen MySQL CHAR und VARCHAR beim Speichern und Lesen

Einführung Kennen Sie wirklich den Unterschied zw...

Detaillierte Erläuterung des Linux-CRM-Bereitstellungscodes

Linux-Grundkonfiguration Kompilieren und installi...

Beispiele für JavaScript-Entschüttelungen und Drosselung

Inhaltsverzeichnis Stabilisierung Drosselung: Ant...

Tipps zum Festlegen von HTML-Tabellenrändern

Für viele HTML-Neulinge ist die Tabelle <table...

Beispiel für die Anpassung des Stils des Auswahlfelds für Formulardateien

Code kopieren Der Code lautet wie folgt: <!DOC...