Heim > Datenbank > MySQL-Tutorial > Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

藏色散人
Freigeben: 2020-10-30 16:53:18
Original
5300 Leute haben es durchsucht

Lösung für verstümmelte chinesische Zeichen in MySQL-importierten Dateien: Erstellen Sie zunächst eine Datenbank und geben Sie die Codierung an. Geben Sie dann vor dem Import der Datenbankdatei die Codierungssatznamen utf8 an.

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

Empfohlen: „MySQL-Video-Tutorial

Um mit dem gestrigen Problem fortzufahren: Nachdem die Datenbank konfiguriert wurde, stellte die Abfragetabelle fest, dass die chinesischen Zeichen verstümmelt waren, und ich konnte es nicht lösen, nachdem ich mir mehrere angesehen hatte Methoden im Internet.
Es fühlt sich an, als gäbe es ein Problem mit der importierten SQL-Datei. Denken Sie also umgekehrt: Verwenden Sie Befehle, um eine Datenbank zu erstellen, fügen Sie einige Daten hinzu und exportieren Sie sie dann, um zu sehen, was passiert.
Beim Einfügen von Daten in die Tabelle wurde ein Fehler gemeldet:
ERROR 1366 (HY000): Falscher Zeichenfolgenwert: „xE6xB5x8BxE8xAFx95“ für Spalte „bookname“ in Zeile 1ERROR 1366 (HY000): Incorrect string value: 'xE6xB5x8BxE8xAFx95' for column 'bookname' at row 1

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?



Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?



这就奇怪了,查看表结构:
show create table book;



Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?



看到了一个不想看到的编码格式latin1,果断改掉,通过命令:alter table book default character set utf8;
改完看到一个神清气爽的结果,表的编码改过来了,但还存在一个“什么鬼?”,字段有个乱码latin1 :



Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?



果断再改,通过命令:alter table book change bookname bookname varchar(32) character set utf8;
改完后也不看了,直接插数据试试:

insert into book
(id,bookname,size,price)
values
(1,"测试",2,3)
;
Nach dem Login kopieren

插入成功,查看数据是不是还中文乱码,发现并不乱码了:



Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?

那么开始进行下一步,导出sql文件,进入到mysql的bin目录下,开始通过命令导出,这个过程需要输入密码

E:\mysql-5.7.28-winx64\bin>mysqldump -u root -p test > test.sql
Enter password: *******
Nach dem Login kopieren

导出的文件,表的编码格式utf8,与之前导入文件的比较并看不出什么问题。
那么,就是之前导入文件的过程,创建数据库的过程除了问题,查看之前导入的mydb.sql 的mydb数据库结构,果然不对:

mysql> use mydb;
Database changed
mysql> show variables like 'character_set_database';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set, 1 warning (0.00 sec)
Nach dem Login kopieren

遂修改之:alert database mydb character set utf8;
然后再查看表的编码,发现有鬼:

mysql> show create table sp_user_cart;
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sp_user_cart | CREATE TABLE `sp_user_cart` (
  `cart_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `user_id` int(11) unsigned NOT NULL COMMENT '瀛﹀憳id',
  `cart_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '璐?墿杞﹁?鎯呬俊鎭?紝浜岀淮鏁扮粍搴忓垪鍖栦俊鎭',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `delete_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`cart_id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8
Nach dem Login kopieren

utf8mb4_unicode_ci 这个东西是怎么出来的...
然后改了编码,查询,还是不对,想起来之前创建数据库,可能是忘记设置编码,导入的东西本来就乱码了,也或者是my.ini配置不对,从头开始用正确流程试试吧。

先查看数据库的编码设置:show variables like 'character%';
发现很混乱:

mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gbk                                    |
| character_set_connection | gbk                                    |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | gbk                                    |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:\mysql-5.7.29-winx64\share\charsets\ |
+--------------------------+----------------------------------------+
Nach dem Login kopieren

开始改,通过一系列的set
set character_set_client = utf8;

🎜🎜

🎜 🎜

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?🎜

🎜🎜🎜🎜Das ist seltsam, sehen Sie sich die Tabellenstruktur an: 🎜show create table book;🎜🎜

🎜🎜

🎜🎜

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?🎜

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?🎜

🎜🎜🎜🎜Ich habe eine Codierung gesehen Ich wollte nicht sehen. Formatieren Sie latin1, ändern Sie es entscheidend und übergeben Sie den Befehl: alter table book default Character set utf8;🎜Nach der Änderung können Sie ein erfrischendes Ergebnis sehen Die Kodierung der Tabelle wurde geändert, aber es gibt immer noch ein „Was zum Teufel?“ ", das Feld ist verstümmelt. latin1: 🎜🎜

🎜🎜

🎜🎜

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?🎜

Was tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?🎜

🎜🎜🎜🎜 Entscheidend und erneut ändern, übergeben Sie den Befehl: alter table book change bookname bookname varchar(32) Character Set utf8;🎜Ich habe es nicht gelesen, nachdem ich die Änderungen vorgenommen habe. Versuchen Sie einfach, die Daten einzufügen: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">+--------------------------+----------------------------------------+ | Variable_name            | Value                                  | +--------------------------+----------------------------------------+ | character_set_client     | utf8                                   | | character_set_connection | utf8                                   | | character_set_database   | utf8                                   | | character_set_filesystem | utf8                                   | | character_set_results    | utf8                                   | | character_set_server     | utf8                                   | | character_set_system     | utf8                                   | | character_sets_dir       | D:\mysql-5.7.29-winx64\share\charsets\ | +--------------------------+----------------------------------------+</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div>🎜Das Einfügen war erfolgreich. Ich habe überprüft, ob die Daten immer noch verstümmelt waren, und festgestellt, dass sie nicht mehr verstümmelt waren p class="image-package">🎜🎜🎜🎜<p class="image-container-fill" style="padding-bottom: 90,79%;"> <img src="https://img.php.cn/upload/image/602/276/640/1603850024398433.png" title="1603850024398433.png" alt="Was" tun wenn die mysql-importdatei verst chinesische zeichen enth ist utf8 und es gibt kein problem beim vergleich mit der zuvor importierten datei. prozess des vorherigen importierens von dateien. sie au mydb-datenbankstruktur mydb.sql. wirklich falsch:>mysql&gt; select * from sp_role; +---------+---------------+--------------------------------------------------------------------------------------------- ------------------------------------------------------+----------------------------------------------------------------- ------------------------+--------------------+ | role_id | role_name     | ps_ids                                                       | ps_ca                         | role_desc          | +---------+---------------+--------------------------------------------------------------------------------------------- ------------------------------------------------------+----------------------------------------------------------------- ------------------------+--------------------+ |      30 | 主管          | 101,0,104,116,115,142,143,144,121,122,123,149,102,107,109,103,111,129,130,134,135,138,139,14 0,141,112,147,125,110,131,132,133,136,137,145,146,148 | Goods-index,Goods-tianjia,Category-index,Order-showlist,Brand-in dex                     | 技术负责人         | |      31 | 测试角色      | 101,0,104,105,116,117,115,142,143,144,121,122,123,149,103,111,129,134,138,112,147                                                       | Goods-showlist,Goods-tianjia,Category-showlist,Order-showlist,Or der-dayin,Order-tianjia | 测试角色描述       | |      34 | 测试角色2     | 0,105,116,142,143,122                                                       | NULL                         | 测试描述12         | |      39 | 大发送到      | 101,0,104,105,116                                                       | NULL                         | 阿斯蒂芬           | |      40 | test          | 102,0,107,109,154,155,145,146,148                                                       | NULL🎜Also habe ich es geändert: <code>alert-Datenbank mydb-Zeichensatz utf8;🎜Dann habe ich die Codierung der Tabelle überprüft und etwas Seltsames gefunden: 🎜rrreee🎜utf8mb4_unicode_ci Wie kam das Ding heraus...🎜Dann habe ich die Codierung geändert und nachgefragt, aber es war immer noch falsch . Ich habe mich daran erinnert, dass ich die Datenbank schon einmal erstellt habe, vielleicht habe ich vergessen, die Codierung festzulegen, oder die importierten Dinge sind fehlerhaft oder die Konfiguration von my.ini ist falsch. 🎜🎜Überprüfen Sie zunächst die Codierungseinstellungen der Datenbank: <code>zeige Variablen wie 'character%';🎜 Fand es sehr verwirrend: 🎜rrreee🎜Begonnen mit der Änderung, durch eine Reihe von set🎜set Character_set_client = utf8;🎜Ergebnis abrufen🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">+--------------------------+----------------------------------------+ | Variable_name            | Value                                  | +--------------------------+----------------------------------------+ | character_set_client     | utf8                                   | | character_set_connection | utf8                                   | | character_set_database   | utf8                                   | | character_set_filesystem | utf8                                   | | character_set_results    | utf8                                   | | character_set_server     | utf8                                   | | character_set_system     | utf8                                   | | character_sets_dir       | D:\mysql-5.7.29-winx64\share\charsets\ | +--------------------------+----------------------------------------+</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div> <p>创建数据库并制定编码:<code>CREATE DATABASE test2 CHARACTER SET utf8 COLLATE utf8_general_ci;
使用:use test2
在导入数据库文件之前,制定编码set names utf8;
导入:source F:xxxx\xxxx\mydb.sql;
不算漫长的等待之后,查询,不乱码了

mysql> select * from sp_role;
+---------+---------------+---------------------------------------------------------------------------------------------
------------------------------------------------------+-----------------------------------------------------------------
------------------------+--------------------+
| role_id | role_name     | ps_ids
                                                      | ps_ca
                        | role_desc          |
+---------+---------------+---------------------------------------------------------------------------------------------
------------------------------------------------------+-----------------------------------------------------------------
------------------------+--------------------+
|      30 | 主管          | 101,0,104,116,115,142,143,144,121,122,123,149,102,107,109,103,111,129,130,134,135,138,139,14
0,141,112,147,125,110,131,132,133,136,137,145,146,148 | Goods-index,Goods-tianjia,Category-index,Order-showlist,Brand-in
dex                     | 技术负责人         |
|      31 | 测试角色      | 101,0,104,105,116,117,115,142,143,144,121,122,123,149,103,111,129,134,138,112,147
                                                      | Goods-showlist,Goods-tianjia,Category-showlist,Order-showlist,Or
der-dayin,Order-tianjia | 测试角色描述       |
|      34 | 测试角色2     | 0,105,116,142,143,122
                                                      | NULL
                        | 测试描述12         |
|      39 | 大发送到      | 101,0,104,105,116
                                                      | NULL
                        | 阿斯蒂芬           |
|      40 | test          | 102,0,107,109,154,155,145,146,148
                                                      | NULL
Nach dem Login kopieren

实战项目可以继续进行,遂生法喜。

Das obige ist der detaillierte Inhalt vonWas tun, wenn die MySQL-Importdatei verstümmelte chinesische Zeichen enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage