Explication détaillée du jeu de caractères et des règles de classement MySQL et du jeu de caractères et des règles de classement de la vue MySQL

Explication détaillée du jeu de caractères MySQL et des règles de classement

Avant d'expliquer les jeux de caractères et les règles de relecture, examinons brièvement les caractères, les jeux de caractères et les encodages de caractères.

Caractère (Caractère) est le nom collectif des lettres, des chiffres et des symboles dans les ordinateurs. Un caractère peut être un caractère chinois, une lettre anglaise, un chiffre arabe, un signe de ponctuation, etc.

Les ordinateurs stockent les données sous forme binaire. Les chiffres, l'anglais, les signes de ponctuation, les caractères chinois et autres caractères que nous voyons habituellement à l'écran sont le résultat d'une conversion de nombres binaires.

Jeu de caractères (Jeu de caractères) définit la correspondance entre les caractères et le binaire et attribue des numéros uniques aux caractères. Les jeux de caractères courants incluent ASCII, GBK, IOS-8859-1, etc.

Le codage de caractères (Codage de caractères) peut également être appelé code de jeu de caractères, qui spécifie comment stocker les numéros de caractères dans l'ordinateur.

大部分字符集都只对应一种字符编码,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了对应的字符编码。所以一般情况下,可以将两者视为同义词。Unicode 字符集除外,Unicode 有三种编码方案,即 UTF-8、UTF-16 和 UTF-32。最为常用的是 UTF-8 编码。

 Les règles de classement peuvent également être appelées règles de classement, qui font référence aux règles de comparaison entre les caractères du même jeu de caractères. Il existe une relation un-à-plusieurs entre les jeux de caractères et les règles de classement, et chaque jeu de caractères possède une règle de classement par défaut. Les jeux de caractères et les règles de classement se complètent et sont interdépendants.

En termes simples, les jeux de caractères sont utilisés pour définir la manière dont MySQL stocke les chaînes, et les règles de classement sont utilisées pour définir la manière dont MySQL compare les chaînes.

Les amis qui souhaitent en savoir plus sur les jeux de caractères ASCII, GB2312, GBK et Unicode peuvent cliquer sur le lien suivant pour lire et apprendre :

Certaines bases de données ne font pas clairement la distinction entre les jeux de caractères et les règles de classement. Par exemple, lors de la création d'une base de données dans SQL Server, la sélection d'un jeu de caractères équivaut à la sélection d'un jeu de caractères et de règles de classement.

Dans MySQL, le jeu de caractères et les règles de classement sont séparés, et les règles de jeu de caractères et de classement doivent être définies. Dans des circonstances normales, il n’y a pas d’exigence particulière, il suffit d’en définir une. Lorsque seul le jeu de caractères est défini, MySQL définira les règles de classement sur les règles de classement par défaut correspondantes dans le jeu de caractères.

Ingénieur senior de base de données Dachang Formation pratique sur la base de données mysql icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

Vous pouvezSHOW VARIABLES LIKE 'character%';vérifier le jeu de caractères actuellement utilisé par MySQL via la commande. La commande et les résultats d'exécution sont les suivants :

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       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

 Les résultats d'exécution ci-dessus sont expliqués dans le tableau suivant :

nom illustrer
caractère_set_client Jeu de caractères utilisé par le client MySQL
caractère_set_connection Jeu de caractères utilisé lors de la connexion à la base de données
base de données_set_caractères Créer le jeu de caractères utilisé par la base de données
caractère_set_filesystem Le jeu de caractères utilisé par le système de fichiers du serveur MySQL. La valeur par défaut est binaire sans aucune conversion.
caractère_set_results Le jeu de caractères utilisé par la base de données lors du renvoi des données au client
caractère_set_server Il est recommandé que le jeu de caractères utilisé par le serveur MySQL soit géré par le système lui-même et ne soit pas défini manuellement.
caractère_set_system Le jeu de caractères utilisé par le système de base de données. La valeur par défaut est utf8 et n'a pas besoin d'être définie.
rép_ensembles_de_caractères Répertoire d'installation du jeu de caractères

Lorsque des caractères tronqués apparaissent, vous n'avez pas besoin de vous soucier des trois variables système Character_set_filesystem, Character_set_system et Character_sets_dir, car elles n'affecteront pas les caractères tronqués.

SHOW VARIABLES LIKE 'collation\_%';Vous pouvez afficher les règles de classement actuelles utilisées par MySQL via des commandes. Les commandes et les résultats d'exécution sont les suivants :

mysql> SHOW VARIABLES LIKE 'collation\_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci    |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.01 sec)

 Les résultats de l'opération ci-dessus sont expliqués comme suit :

  • collation_connection : règles de classement utilisées lors de la connexion à la base de données
  • collation_database : règles de classement utilisées lors de la création de la base de données
  • collation_server : règles de classement utilisées par le serveur MySQL


Les règles et commandes de relecture sont les suivantes :

  • Commence par le nom du jeu de caractères correspondant à la règle de classement
  • Centrez le nom du pays (ou centrez-le avec le général)
  • Se terminant par ci, cs ou bin, ci signifie insensible à la casse, cs signifie sensible à la casse et bin signifie comparaison par valeur codée binaire.

Processus de conversion du jeu de caractères MySQL

Le processus de conversion des jeux de caractères dans MySQL est le suivant :

1) Lors de l'exécution de commandes MySQL ou d'instructions SQL dans la fenêtre d'invite de commande (ligne de commande cmd), ces commandes ou instructions sont converties du "jeu de caractères de la fenêtre d'invite de commande" en ceux défini par le jeu de caractères "character_set_client".

2) Après une connexion réussie au serveur MySQL à l'aide de la fenêtre d'invite de commande, un "lien de communication de données" est établi. Les commandes MySQL ou les instructions SQL sont transmises au serveur MySQL via le "lien de données", et le jeu de caractères défini par Character_set_client est converti en Character_set_connection Jeu de caractères défini.

3) Une fois que l'instance de service MySQL a reçu la commande MySQL ou l'instruction sql dans le lien de communication de données, elle convertit la commande MySQL ou l'instruction sql du jeu de caractères défini par Character_set_connection vers le jeu de caractères défini par Character_set_server.

4) Si la commande MySQL ou l'instruction sql fonctionne sur une certaine base de données, convertissez la commande MySQL ou l'instruction sql du jeu de caractères défini par Character_set_server vers le jeu de caractères défini par Character_set_database.

5) Une fois la commande MySQL ou l'instruction SQL exécutée, le résultat de l'exécution est défini sur le jeu de caractères défini par Character_set_results.

6) Les résultats de l'exécution sont renvoyés le long du chemin d'origine du lien de communication de données ouvertes, et les résultats de l'exécution sont convertis du jeu de caractères défini par Character_set_results au jeu de caractères défini par Character_set_client, et finalement convertis en jeu de caractères de la fenêtre d'invite de commande et affiché dans la fenêtre d'invite de commande. .

 

Compétences de base de la base de données Mysql, pratique complète icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Jeu de caractères d'affichage MySQL et règles de classement

Dans la section " Explication détaillée du jeu de caractères et des règles de classement MySQL ", nous avons découvert le jeu de caractères MySQL et les règles de classement. Cette section présente principalement plusieurs méthodes pour afficher le jeu de caractères et les règles de classement.

Dans MySQL, le processus de commande et d'exécution pour afficher les jeux de caractères disponibles est le suivant : 

mysql> SHOW CHARACTER set;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset           | binary              |      1 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.02 sec)

dans:

  • La première colonne (Charset) est le nom du jeu de caractères ;
  • La deuxième colonne (Description) est la description du jeu de caractères ;
  • La troisième colonne (Classement par défaut) est la règle de classement par défaut du jeu de caractères ;
  • La quatrième colonne (Maxlen) indique le nombre maximum d'octets occupés par un caractère dans le jeu de caractères.


Les jeux de caractères couramment utilisés sont les suivants :

  • latin1 prend en charge les caractères d'Europe occidentale, les caractères grecs, etc.
  • gbk prend en charge les caractères chinois simplifiés.
  • big5 prend en charge les caractères chinois traditionnels.
  • utf8 prend en charge les caractères de presque tous les pays.

Compétences de base de la base de données MySQL pratique complète icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Vous pouvez également vérifier les jeux de caractères pris en charge par MySQL en interrogeant les enregistrements dans la table information_schema.character_set. L'instruction SQL et le processus d'exécution sont les suivants :

mysql> SELECT * FROM information_schema.character_sets;
+--------------------+----------------------+---------------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION                     | MAXLEN |
+--------------------+----------------------+---------------------------------+--------+
| big5               | big5_chinese_ci      | Big5 Traditional Chinese        |      2 |
| dec8               | dec8_swedish_ci      | DEC West European               |      1 |
| cp850              | cp850_general_ci     | DOS West European               |      1 |
| hp8                | hp8_english_ci       | HP West European                |      1 |
......

Vous pouvez utiliser  SHOW COLLATION LIKE '***';des commandes pour afficher les règles de classement des jeux de caractères associés.

mysql> SHOW COLLATION LIKE 'gbk%';
+----------------+---------+----+---------+----------+---------+
| Collation      | Charset | Id | Default | Compiled | Sortlen |
+----------------+---------+----+---------+----------+---------+
| gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 |
| gbk_bin        | gbk     | 87 |         | Yes      |       1 |
+----------------+---------+----+---------+----------+---------+
2 rows in set (0.00 sec)

Le résultat d'exécution ci-dessus est la règle de classement correspondant au jeu de caractères GBK, parmi lesquels gbk_chinese_ci est la règle de classement par défaut et n'est pas sensible à la casse. gbk_bin compare en fonction de valeurs codées binaires et est sensible à la casse.

Vous pouvez également afficher les règles de classement disponibles dans MySQL en interrogeant les enregistrements de la table information_schema.COLLATIONS. L'instruction SQL et le processus d'exécution sont les suivants :

mysql> SELECT * FROM information_schema.COLLATIONS;
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME           | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------------+--------------------+-----+------------+-------------+---------+
| big5_chinese_ci          | big5               |   1 | Yes        | Yes         |       1 |
| big5_bin                 | big5               |  84 |            | Yes         |       1 |
| dec8_swedish_ci          | dec8               |   3 | Yes        | Yes         |       1 |
| dec8_bin                 | dec8               |  69 |            | Yes         |       1 |
| cp850_general_ci         | cp850              |   4 | Yes        | Yes         |       1 |
| cp850_bin                | cp850              |  80 |            | Yes         |       1 |
......
Exemple 1

Spécifiez "A" et "a" pour comparer respectivement selon les règles de classement gbk_chinese_ci et gbk_bin. Les instructions SQL et les résultats d'exécution sont les suivants :

mysql> SELECT CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
    -> else 0 end;
+-------------------------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
else 0 end |
+-------------------------------------------------------------------------------------+
|                                                                                   1 |
+-------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

mysql> SELECT CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
    -> else 0 end;
+-----------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
else 0 end |
+-----------------------------------------------------------------------+
|                                                                     0 |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

Puisque les règles de classement gbk_chinese_ci ignorent la casse, les deux "A" et "a" sont considérés comme identiques. La règle de classement gbk_bin n'ignore pas la casse et les deux caractères sont considérés comme différents.

Dans les applications réelles, nous devons confirmer à l'avance comment l'application doit être triée, si elle est sensible à la casse, puis sélectionner les règles de relecture correspondantes.

Compétences de base de la base de données Mysql, pratique complète icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Je suppose que tu aimes

Origine blog.csdn.net/m0_37449634/article/details/135554392
conseillé
Classement