Erfahren Sie, wie Sie den Fehler beim Speichern chinesischer Schriftzeichen in der MySQL-Datenbank beheben können

Erfahren Sie, wie Sie den Fehler beim Speichern chinesischer Schriftzeichen in der MySQL-Datenbank beheben können

1. Aufgetretene Probleme

Beim Speichern chinesischer Schriftzeichen in der Datenbank ist mir folgendes Problem begegnet:

Ursache: java.sql.SQLException: Falscher Zeichenfolgenwert: '\xE6\x9F\xAF\xE5\x8D\x97' für Spalte 'user_name' in Zeile 1

Bildbeschreibung hier einfügen

2. Analysieren Sie das Problem

Dies liegt an einem Problem mit dem Datenbankdesign. Beim Erstellen der Datenbank wurde der Standard direkt ausgewählt, ohne ihn auf UTF-8 zu ändern. Später habe ich versucht, es manuell zu ändern, aber es hat immer noch nicht funktioniert .

Ich habe versucht, die Standardfelder der Datenbank und Tabelle auf UTF-8 zu ändern, aber chinesische Zeichen können immer noch nicht gespeichert werden.

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

3. Das eigentliche Problem

Bildbeschreibung hier einfügen

Das wirkliche Problem ist, dass Sie beim Öffnen der Tabelleninformationen die Existenz von latin1 sehen können. Das liegt daran, dass wir den Feldtyp auch dann nicht ändern können, wenn wir ihn später manuell ändern. Genau wie oben werden die Tabelleninformationen auch dann nicht geändert, wenn wir ihn ändern. Die wirkliche Lösung ist: 1. Entweder wir erstellen die Datenbank neu und stellen sie beim Erstellen auf utf8 ein (etwas schwierig), 2. Oder die folgende Lösung (nicht so einfach, wenn viele Felder beteiligt sind): Exportieren und ändern Sie die SQL-Anweisung und führen Sie die SQL-Anweisung dann erneut aus.

4. Lösung

Exportieren Sie unsere Datenbank als SQL-Datei:

/*
SQLyog Enterprise v12.08 (64 Bit)
MySQL – 5.7.31: Datenbank – data_test
*********************************************************************
*/


/*!40101 NAMEN FESTLEGEN utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SETZEN @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SETZEN @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DATENBANK ERSTELLEN /*!32312 WENN NICHT VORHANDEN*/`data_test` /*!40100 STANDARDZEICHENSATZ latin1*/;

VERWENDEN Sie „data_test“;

/*Tabellenstruktur für Tabelle „Benutzer“ */

DROP TABLE, WENN `Benutzer` EXISTIERT;

CREATE TABLE `Benutzer` (
  `user_id` int(11) NICHT NULL AUTO_INCREMENT,
  `user_name` varchar(50) CHARACTER SET latin1 NOT NULL KOMMENTAR 'Konto',
  `Passwort` varchar(50) ZEICHENSATZ latin1 NICHT NULL KOMMENTAR 'Passwort',
  `user_state` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '1' COMMENT 'Status, logische Löschung',
  PRIMÄRSCHLÜSSEL (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

/*Daten für die Tabelle „Benutzer“ */

SPERRT TABELLEN `Benutzer` SCHREIBEN;

in `Benutzer`(`Benutzer-ID`,`Benutzername`,`Passwort`,`Benutzerstatus`) Werte einfügen (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0');

TABELLEN ENTSPERREN;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SETZEN SIE FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SETZEN SIE UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Wie oben erwähnt, haben wir latin1 gefunden, also werden wir alles latin1 durch utf8 ersetzen.

Die ersetzte SQL-Datei:

/*
SQLyog Enterprise v12.08 (64 Bit)
MySQL – 5.7.31: Datenbank – data_test
*********************************************************************
*/


/*!40101 NAMEN FESTLEGEN utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SETZEN @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SETZEN @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DATENBANK ERSTELLEN /*!32312 WENN NICHT VORHANDEN */`data_test` /*!40100 STANDARDZEICHENSATZ utf8 */;

VERWENDEN Sie „data_test“;

/*Tabellenstruktur für Tabelle „Benutzer“ */

DROP TABLE, WENN `Benutzer` EXISTIERT;

CREATE TABLE `Benutzer` (
  `user_id` int(11) NICHT NULL AUTO_INCREMENT,
  `user_name` varchar(50) CHARACTER SET utf8 NOT NULL KOMMENTAR 'Konto',
  `Passwort` varchar(50) ZEICHENSATZ utf8 NICHT NULL KOMMENTAR 'Passwort',
  `user_state` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '1' COMMENT 'Status, logische Löschung',
  PRIMÄRSCHLÜSSEL (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

/*Daten für die Tabelle „Benutzer“ */

SPERRT TABELLEN `Benutzer` SCHREIBEN;

in `Benutzer`(`Benutzer-ID`,`Benutzername`,`Passwort`,`Benutzerstatus`) Werte einfügen (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0');

TABELLEN ENTSPERREN;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SETZEN SIE FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SETZEN SIE UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Wählen Sie SQL-Skript ausführen und wählen Sie die geänderte SQL-Datei aus

Bildbeschreibung hier einfügen

Überprüfen Sie nun die Tabelleninformationen

Bildbeschreibung hier einfügen

Auf diese Weise ist alles UTF8, was das Problem im Grunde löst.

5. Lösungseffekt

Testen Sie, ob das Problem wirklich gelöst ist:

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Damit ist dieser Artikel über MySQL-Grundlagen – So beheben Sie Fehler beim Speichern chinesischer Zeichen in der Datenbank – abgeschlossen. Weitere Informationen zum Beheben von Fehlern beim Speichern chinesischer Zeichen in der Datenbank finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet
  • Lösung für das Problem des Datenverlusts bei Verwendung der Ersetzungsoperation in MySQL
  • Mehrere Lösungen zur Vermeidung von MySQL-Datenverlust bei einem Serverausfall
  • Warum der Speicherplatz nach dem Löschen von Daten in MySQL nicht freigegeben wird
  • Python-Grundlagen: Bedienung einer MySQL-Datenbank
  • Django speichert Bilder in der MySQL-Datenbank und zeigt sie auf der Front-End-Seite an
  • MyBatis Batch-Einfügen/Ändern/Löschen von MySql-Daten
  • Implementierungscode zum Speichern von Bildern in der MySQL-Datenbank und deren Anzeige auf der Front-End-Seite
  • Zusammenfassung der MySQL-Datenmigration
  • Golang implementiert die Übermittlung und das Rollback von MySQL-Datenbanktransaktionen
  • Detaillierte Erläuterung der Rolle der Standarddatenbank nach der MySQL-Installation
  • Ursachen und Lösungen für MySQL-Datenverlust

<<:  Erfahren Sie, wie Sie die Selbstüberwachung von Apache SkyWalking schnell aktivieren

>>:  Erfahren Sie mehr über das V-Modell und seine Modifikatoren in einem Artikel

Artikel empfehlen

Aufbau der Angular-Umgebung und einfache Erfahrungszusammenfassung

Einführung in Angular Angular ist ein von Google ...

Zusammenfassung der MySQL-Tabellen- und Spaltenkommentare

Genau wie bei Code können Sie den Tabellen und Sp...

HTML-Tabellen-Tag-Tutorial (33): Attribut für vertikale Zellenausrichtung VALIGN

In vertikaler Richtung können Sie die Zellenausri...

MySQL-Datenbankgrundlagen - Prinzip der Join-Operation

Join verwendet den Nested-Loop-Join-Algorithmus. ...

Erste Erkundung gängiger Befehle für Docker-Anfänger

Bevor wir Docker offiziell verwenden, machen wir ...

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort vergessen?

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...

Docker-Container greift auf MySQL-Operationen des Hosts zu

Hintergrund: Es gibt ein Flask-Projekt, das eine ...

Website User Experience Design (UE)

Ich habe gerade einen von JunChen verfassten Beitr...

Mysql-Indextypen und grundlegende Anwendungsbeispiele

Inhaltsverzeichnis Index - Allgemeiner Index - Ei...

Eine kurze Diskussion über den magischen Schrägstrich im Nginx Reverse Proxy

Beim Konfigurieren des Nginx-Reverse-Proxys könne...

Welche Arten von MySQL-Verbindungsabfragen kennen Sie?

Vorwort Wenn die Abfrageinformationen aus mehrere...

CentOS-Methode zum Ändern der Standard-SSH-Portnummer – Beispiel

Die Standard-SSH-Portnummer von Linux-Servern ist...