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

So laden Sie Projekte im Linux-System in die Code Cloud hoch

Erstellen Sie ein neues Projekt test1 auf Code Cl...

Reagieren Sie mit Beispielcode zur Implementierung des Anmeldeformulars

Als Vue-Benutzer ist es an der Zeit, React zu erw...

Warum MySQL Repeatable Read als Standardisolationsebene wählt

Inhaltsverzeichnis Oracle-Isolationsebenen MySQL-...

Docker-Installationsschritte für Redmine

Laden Sie das Image herunter (optionaler Schritt,...

MySQL-Fehlernummer 1129 – Lösung

SQLyog stellt eine Verbindung zu MySQL her, Fehle...

Implementierung der Docker-Bereitstellung des Nuxt.js-Projekts

Offizielle Docker-Dokumentation: https://docs.doc...

Beispielcode für horizontalen Linienstil „hr“

Code kopieren Der Code lautet wie folgt: <hr S...

Einführung in die Eigenschaften von B-Tree

B-Baum ist eine allgemeine Datenstruktur. Daneben...

Detaillierte Erläuterung der Cache-Konfiguration von Nginx Proxy_Cache

Vorwort: Aufgrund meiner Arbeit beschäftige ich m...

JavaScript-Farbbetrachter

In diesem Artikelbeispiel wird der spezifische Ja...

Detaillierte Erklärung von Javascript-Closures und -Anwendungen

Inhaltsverzeichnis Vorwort 1. Was ist ein Abschlu...

Detaillierte Erläuterung der Linux-Textverarbeitungstools

1. Zählen Sie die Anzahl der Benutzer, deren Stan...

Empfehlen Sie einen coolen blinkenden Alarmknopf

Die Wirkung ist wie folgt: Der Code lautet wie fo...