Maison > base de données > tutoriel mysql > le corps du texte

Comment résoudre le problème des caractères chinois tronqués dans MySQL

coldplay.xixi
Libérer: 2020-07-06 16:20:27
avant
2666 Les gens l'ont consulté

Comment résoudre le problème des caractères chinois tronqués dans MySQL

1. MySQL apparaîtra La raison des caractères chinois tronqués
Lorsque nous utilisons la base de données MySQL, nous rencontrons souvent le problème des caractères tronqués. Regardez le code ci-dessous.

    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>
Copier après la connexion
Copier après la connexion

Recommandations d'apprentissage associées : Tutoriel vidéo mysql

Évidemment, lors de l'insertion du chinois, une erreur est signalée. Quelle est la raison ?

    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/ |
    +--------------------------+----------------------------+
Copier après la connexion
Copier après la connexion

character_set_client L'encodage des caractères utilisé par le client
character_set_connection L'encodage utilisé par le lien de la base de données
character_set_database L'encodage des caractères utilisé par la base de données
Il s'avère que l'encodage des caractères n'est pas unifié avec l'encodage du serveur et de la base de données.

2. Solution aux caractères chinois tronqués dans MySQL
Méthode 1 : Définir les noms

    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)
Copier après la connexion
Copier après la connexion

Reviens Jetez un œil aux paramètres du jeu de caractères

     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/ |
    +--------------------------+----------------------------+
Copier après la connexion
Copier après la connexion

Si le codage des caractères est unifié, il n'y aura pas de caractères tronqués.
Résoudre le problème des caractères tronqués consiste en fait à unifier l'encodage des caractères du client avec l'encodage du serveur et de la base de données. Les encodages du serveur et de la base de données ici sont latin1, et tous les noms définis latin1 peuvent résoudre temporairement le problème tronqué.

Méthode 2 : Modifier le jeu de caractères du fichier de configuration de la base de données sur UTF8
UTF8 prend en charge de nombreux systèmes linguistiques, il est donc fortement recommandé de définir le codage des caractères sur UTF8 en production. Ouvrez le fichier de configuration de la base de données et ajoutez le contenu suivant sous [client], [mysql] et [mysqld] respectivement.

    #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
Copier après la connexion
Copier après la connexion

Redémarrer la base de données

   [root@test ~]# systemctl restart mysqld
Copier après la connexion
Copier après la connexion

Créer la bibliothèque et la table de création

    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)
Copier après la connexion
Copier après la connexion

Jetons un coup d'œil aux paramètres du jeu de caractères

🎜 <

1. La raison pour laquelle les caractères chinois tronqués apparaissent dans MySQL

Lorsque nous utilisons le Base de données MySQL, nous rencontrons souvent des caractères tronqués. Question, regardez le code ci-dessous.

    mysql> show variables like &#39;%CHARACTER%&#39;;
    +--------------------------+----------------------------+
    | 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/ |
    +--------------------------+----------------------------+
Copier après la connexion

Évidemment, une erreur est signalée lors de l'insertion de caractères chinois. Quelle en est la raison ?

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

    mysql> insert into test values(1,&#39;宋蔚然&#39;);
    ERROR 1366 (HY000): Incorrect string value: &#39;\xE5\xAE\x8B\xE8\x94\x9A...&#39; for column &#39;name&#39; at row 1
    mysql>
Copier après la connexion
Copier après la connexion

character_set_client L'encodage des caractères utilisé par le client
character_set_connection L'encodage utilisé par le lien de la base de données
character_set_database L'encodage des caractères utilisé par la base de données

Il s'avère que l'encodage des caractères n'est pas unifié avec l'encodage du serveur et de la base de données.

2. Solution aux caractères chinois tronqués dans MySQL
Méthode 1 : Définir les noms

    mysql> show variables like &#39;%CHARACTER%&#39;;
    +--------------------------+----------------------------+
    | 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/ |
    +--------------------------+----------------------------+
Copier après la connexion
Copier après la connexion

Reviens Jetez un œil aux paramètres du jeu de caractères

    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,&#39;宋蔚然&#39;);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)
Copier après la connexion
Copier après la connexion

Si le codage des caractères est unifié, il n'y aura pas de caractères tronqués.

Résoudre le problème des caractères tronqués consiste en fait à unifier l'encodage des caractères du client avec l'encodage du serveur et de la base de données. Les encodages du serveur et de la base de données ici sont latin1, et définir tous les noms latin1 peut résoudre temporairement le problème tronqué.

Méthode 2 : Modifier le jeu de caractères du fichier de configuration de la base de données sur UTF8

UTF8 prend en charge de nombreux systèmes linguistiques, il est donc fortement recommandé de définir le codage des caractères sur UTF8 en production. Ouvrez le fichier de configuration de la base de données et ajoutez le contenu suivant sous [client], [mysql] et [mysqld] respectivement.

     mysql> show variables like &#39;%CHARACTER%&#39;;
    +--------------------------+----------------------------+
    | 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/ |
    +--------------------------+----------------------------+
Copier après la connexion
Copier après la connexion

Redémarrez la base de données

    #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
Copier après la connexion
Copier après la connexion

Réécrivez la bibliothèque et la table créées

   [root@test ~]# systemctl restart mysqld
Copier après la connexion
Copier après la connexion

Jetons un coup d'œil aux paramètres du jeu de caractères<🎜>
    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,&#39;宋蔚然&#39;);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from test;
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | 宋蔚然    |
    +------+-----------+
    1 row in set (0.00 sec)
Copier après la connexion
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!