Heim  >  Artikel  >  Datenbank  >  So lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL

So lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL

coldplay.xixi
coldplay.xixinach vorne
2020-07-06 16:20:112710Durchsuche

So lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL

1. MySQL wird angezeigt Der Grund für verstümmelte chinesische Zeichen
Wenn wir eine MySQL-Datenbank verwenden, stoßen wir häufig auf das Problem verstümmelter Zeichen. Schauen Sie sich den folgenden Code an.

    mysql> create table test(id int,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

    mysql> insert into test values(1,'宋蔚然');
    ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1
    mysql>

Verwandte Lernempfehlungen: MySQL-Video-Tutorial

Offensichtlich wird beim Einfügen von Chinesisch ein Fehler gemeldet. Was ist der Grund?

    mysql> show variables like '%CHARACTER%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

character_set_client Die vom Client verwendete Zeichenkodierung
character_set_connection Die von der Datenbankverknüpfung verwendete Kodierung
character_set_database Die von der Datenbank verwendete Zeichenkodierung
Es stellt sich heraus, dass die Zeichenkodierung nicht einheitlich ist mit der Kodierung des Servers und der Datenbank.

2. Lösung für verstümmelte chinesische Zeichen in MySQL
Methode 1: Namen festlegen

    mysql> set names latin1;
    
    mysql> set names latin1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;
    Empty set (0.00 sec)
    
    mysql> insert into test values(1,'宋蔚然');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)

Komm wieder Schauen Sie sich die Zeichensatzeinstellungen an

     mysql> show variables like '%CHARACTER%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

Wenn die Zeichenkodierung vereinheitlicht ist, gibt es keine verstümmelten Zeichen.
Um das Problem verstümmelter Zeichen zu lösen, muss die Zeichenkodierung des Clients mit der Kodierung des Servers und der Datenbank vereinheitlicht werden. Die Server- und Datenbankcodierungen sind hier latin1, und das Festlegen aller Namen auf latin1 kann das verstümmelte Problem vorübergehend lösen.

Methode 2: Ändern Sie den Zeichensatz der Datenbankkonfigurationsdatei auf UTF8
UTF8 unterstützt viele Sprachsysteme, daher wird dringend empfohlen, die Zeichenkodierung auf einzustellen UTF8 in Produktion. Öffnen Sie die Datenbankkonfigurationsdatei und fügen Sie den folgenden Inhalt unter [Client], [MySQL] und [MySQL] hinzu.

    #vi /mysql/data/3306/my.cnf
    
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci

Starten Sie die Datenbank neu

   [root@test ~]# systemctl restart mysqld

Erstellen Sie die Erstellungsbibliothek und -tabelle

    mysql> create database test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use test;
    Database changed
    mysql> create table test(id int,name varchar(10));
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> insert into test values(1,'宋蔚然');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)

Werfen wir einen Blick auf die Einstellungen des Zeichensatzes

🎜

1. Der Grund, warum chinesische verstümmelte Zeichen in MySQL erscheinen

Wenn wir das verwenden In der MySQL-Datenbank stoßen wir häufig auf verstümmelte Zeichen. Schauen Sie sich den folgenden Code an.

    mysql> show variables like '%CHARACTER%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

Offensichtlich wird beim Einfügen chinesischer Schriftzeichen ein Fehler gemeldet. Was ist der Grund?

    mysql> create table test(id int,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

    mysql> insert into test values(1,'宋蔚然');
    ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1
    mysql>

character_set_client Die vom Client verwendete Zeichenkodierung
character_set_connection Die von der Datenbankverknüpfung verwendete Zeichenkodierung
character_set_database Die von der Datenbank verwendete Zeichenkodierung

Es stellt sich heraus, dass die Zeichenkodierung nicht einheitlich ist mit der Kodierung des Servers und der Datenbank.

2. Lösung für verstümmelte chinesische Zeichen in MySQL
Methode 1: Namen festlegen

    mysql> show variables like '%CHARACTER%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

Komm wieder Schauen Sie sich die Zeichensatzeinstellungen an

    mysql> set names latin1;
    
    mysql> set names latin1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;
    Empty set (0.00 sec)
    
    mysql> insert into test values(1,'宋蔚然');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)

Wenn die Zeichenkodierung vereinheitlicht ist, gibt es keine verstümmelten Zeichen.

Um das Problem verstümmelter Zeichen zu lösen, muss die Zeichenkodierung des Clients mit der Kodierung des Servers und der Datenbank vereinheitlicht werden. Die Server- und Datenbankcodierungen sind hier latin1, und das Festlegen aller Namen latin1 kann das verstümmelte Problem vorübergehend lösen.

Methode 2: Ändern Sie den Zeichensatz der Datenbankkonfigurationsdatei auf UTF8

UTF8 unterstützt viele Sprachsysteme, daher wird dringend empfohlen, die Zeichenkodierung auf einzustellen UTF8 in Produktion. Öffnen Sie die Datenbankkonfigurationsdatei und fügen Sie den folgenden Inhalt unter [Client], [MySQL] bzw. [MySQL] hinzu.

     mysql> show variables like '%CHARACTER%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

Starten Sie die Datenbank neu

    #vi /mysql/data/3306/my.cnf
    
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci

Schreiben Sie die erstellte Bibliothek und Tabelle neu

   [root@test ~]# systemctl restart mysqld

Werfen wir einen Blick auf die Zeichensatzeinstellungen
    mysql> create database test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use test;
    Database changed
    mysql> create table test(id int,name varchar(10));
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> insert into test values(1,'宋蔚然');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen