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

Zusammenfassung gängiger Fehler beim Entwurf von MySQL-Tabellen

Inhaltsverzeichnis Fehler 1: Zu viele Datenspalte...

Details zur MySQL-Sicherheitsverwaltung

Inhaltsverzeichnis 1. Vorstellen gemäß der Bestel...

So stellen Sie Redis schnell als Docker-Container bereit

Inhaltsverzeichnis Erste Schritte Datenspeicherun...

Diskussion zum Problem der Initialisierung von Iframe-Knoten

Heute fiel mir plötzlich ein, die Produktionsprinz...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

Umfassendes Verständnis der HTML-Grundstruktur

Einführung in HTML HyperText-Auszeichnungssprache...

So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

Während des Entwicklungs- und Debugging-Prozesses...

Wie stellt MySQL die Datenintegrität sicher?

Die Bedeutung von Datenkonsistenz und -integrität...

Tiefgreifendes Verständnis der MySQL-Selbstverbindung und Join-Assoziation

1. MySQL-Selbstverbindung MySQL muss beim Abfrage...

Einige grundlegende Anweisungen für Docker

Inhaltsverzeichnis Einige grundlegende Anweisunge...

Docker-Batch starten und alle Container schließen

Im Docker Starten Sie alle Containerbefehle Docke...

So erstellen Sie PHP7 mit einem benutzerdefinierten Docker-Image

Führen Sie zunächst eine einfache Docker-Installa...