Maison  >  Article  >  base de données  >  Une introduction aux causes des caractères tronqués MySQL et comment définir le format de données UTF8

Une introduction aux causes des caractères tronqués MySQL et comment définir le format de données UTF8

不言
不言avant
2019-03-27 10:05:312542parcourir

Le contenu de cet article concerne les raisons pour lesquelles les caractères MySQL sont tronqués et la méthode de définition du format de données UTF8. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

L'une des choses les plus pénibles lors de l'utilisation de MySQL est que le résultat est tronqué. Définir le format d'encodage sur UTF8 peut résoudre ce problème. Aujourd'hui, nous allons expliquer pourquoi et comment le configurer de cette manière.

Format de caractères MySQL

Jeu de caractères

Dans le langage de programmation, afin d'éviter les caractères chinois tronqués, nous utiliserons Unicode pour traiter les caractères chinois, et Afin de réduire la bande passante du réseau et d'économiser de l'espace de stockage, nous utilisons UTF8 pour l'encodage. Les étudiants qui n'en savent pas suffisamment sur les différences entre les deux peuvent se référer à l'article Le passé et le présent du jeu de caractères Unicode et de l'encodage UTF8.

De même dans MySQL, nous aurons également un tel traitement. Nous pouvons vérifier la méthode d'encodage (jeu de caractères) du paramètre actuel de la base de données :

mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| 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/local/mysql/share/charsets/ | 
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

La table contient le jeu de caractères actuellement défini. . , regardons quelques valeurs dont il n'y a pas lieu de se soucier :

character_set_filesystem | binaire : Le format de stockage sur le système de fichiers, la valeur par défaut est binaire (binaire)

character_set_system | utf8 : Le format de stockage du système, la valeur par défaut est binaire utf8

character_sets_dir | /usr/local/mysql/share/charsets/ : Le chemin du fichier des jeux de caractères pouvant être utilisés

Les paramètres restants sont les paramètres qui affectent la lecture et l'écriture quotidiennes de caractères tronqués :
- Character_set_client : jeu de caractères pour les données de demande du client
- Character_set_connection : jeu de caractères pour les données reçues du client puis transmises
- Character_set_database : jeu de caractères de la base de données par défaut ; s'il n'y a pas de base de données par défaut, utilisez Character_set_server Field
- Character_set_results : Jeu de caractères du jeu de résultats
- Character_set_server : Jeu de caractères par défaut du serveur de base de données

Une introduction aux causes des caractères tronqués MySQL et comment définir le format de données UTF8

Le processus de conversion du jeu de caractères est divisé en 3 étapes :

1 Le client demande des données de base de données et les données envoyées utilisent le jeu de caractères Character_set_client

. 2. Une fois que l'instance MySQL a reçu les données envoyées par le client, elle les convertit en jeu de caractères Character_set_connection

3 Lors de l'exécution d'opérations internes, convertissez le jeu de caractères de données en jeu de caractères d'opération interne :

.

(1) Utilisez la valeur de paramètre de jeu de caractères de chaque champ de données

(2) Si s'il n'existe pas, utilisez la valeur de paramètre de jeu de caractères par défaut de la table de données correspondante

(3) S'il n'existe pas, utilisez la valeur de paramètre de jeu de caractères par défaut de la base de données correspondante

(4) S'il n'existe pas, utilisez Character_set_server pour définir la valeur

4. la valeur du résultat de l'opération à partir du jeu de caractères de l'opération interne sur Character_set_results

Ordre des caractères

Avant de parler de l'ordre des caractères, nous devons comprendre quelques connaissances de base :

Caractère (Caractère ) fait référence au plus petit symbole idéographique du langage humain. Par exemple, 'A', 'B', etc. ;

Étant donné une série de caractères, attribuez une valeur à chaque caractère et utilisez la valeur pour représenter le caractère correspondant. encodage du caractère (Encoding ). Par exemple, on attribue la valeur 0 au caractère 'A' et la valeur 1 au caractère 'B', alors 0 est l'encodage du caractère 'A'

donne une série de caractères et attribue l'encodage correspondant. Enfin, l'ensemble de tous ces couples de caractères et d'encodage est le jeu de caractères (Character Set). Par exemple, lorsque la liste de caractères donnée est {'A','B'}, {'A'=>0, 'B'=>1} est un jeu de caractères

; Le classement des caractères fait référence aux règles de comparaison entre les caractères d'un même jeu de caractères

Après avoir déterminé la séquence de caractères, nous pouvons alors définir quels sont les caractères équivalents dans un jeu de caractères et quelles sont les différences entre caractères La relation de taille ;

Chaque séquence de caractères correspond de manière unique à un jeu de caractères, mais un jeu de caractères peut correspondre à plusieurs séquences de caractères, dont l'une est la séquence de caractères par défaut (Collage par défaut

Les noms de séquences de caractères dans MySQL suivent la convention de dénomination : commencez par le nom du jeu de caractères correspondant à la séquence de caractères ; commencez par _ci (insensible à la casse), _cs (sensible à la casse) ou _bin (indique une comparaison par encodage). valeur, binaire) à la fin. Par exemple : sous la séquence de caractères "utf8_general_ci", les caractères "a" et "A" sont équivalents

Par conséquent, la séquence de caractères est différente du jeu de caractères et est utilisée pour la comparaison d'égalité ou de taille de la base de données ; champs. Vérifions la séquence de caractères définie par l'instance MySQL :

mysql> show variables like 'collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci | 
| collation_database   | latin1_swedish_ci | 
| collation_server     | latin1_swedish_ci | 
+----------------------+-------------------+
3 rows in set (0.00 sec)

Les séquences de caractères courantes correspondant à utf8 sont : utf8_unicode_ci/utf8_general_ci et utf8_bin, etc. Alors quelles sont leurs différences ?

1. _bin est stocké et comparé en binaire. Il est sensible à la casse. Utilisez-le lors du stockage du contenu binaire

2. médiocre. Utilisez-le lorsque vous utilisez le chinois et l'anglais.

3. utf8_unicode_ci : Haute précision, mais la vitesse de relecture est légèrement lente. Utilisez

lorsque vous utilisez des langues étrangères telles que l'Allemagne, la France, et la Russie. Pour des différences détaillées, veuillez vous référer à

Les règles de tri utf8_unicode_ci et utf8_general_ci dans le résumé des différences Mysql.

Modifier le jeu de caractères et l'ordre des caractères

Si des caractères tronqués apparaissent lors de la connexion à MySQL, il peut être essentiellement déterminé que les paramètres de jeu/ordre des caractères ne sont pas uniformes. Le format latin1 par défaut de MySQL ne prend pas en charge le chinois. Puisque nous sommes en Chine, nous avons choisi le format utf8, qui prend en charge de manière très complète le chinois et diverses langues. Par conséquent, nous devons modifier le jeu de caractères et la séquence de caractères qui nécessitent une attention particulière au format utf8.

Vous pouvez également choisir le format utf8mb4, qui prend en charge l'enregistrement des emoji

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer