Maison  >  Article  >  base de données  >  Explication détaillée des problèmes de jeu de caractères MySQL (image)

Explication détaillée des problèmes de jeu de caractères MySQL (image)

黄舟
黄舟original
2017-03-18 14:34:491274parcourir

Récemment, un ancien projet de l'entreprise devait prendre en charge les expressions emoji. Au début, je pensais qu'il s'agirait simplement de modifier les champs du tableau dans la base de données, mais de manière inattendue, cela a provoqué une série de problèmes. Résumez-le ici pour rappel.

01 MySQL Jeu de caractèresParamètres

Explication détaillée des problèmes de jeu de caractères MySQL (image)

character_set_server : jeu de caractères de fonctionnement interne par défaut
character_set_client : jeu de caractères utilisé par les données source du client
character_set_connection : jeu de caractères de la couche de connexion
character_set_results : résultat de la requête jeu de caractères
character_set_database : jeu de caractères par défaut de la base de données actuellement sélectionnée
character_set_system : jeu de caractères des métadonnées du système (noms de champs, etc.)

02 Processus de conversion du jeu de caractères dans MySQL

  • MySQL Server convertit les données de la requête de character_set_client en character_set_connection lors de la réception de la requête

  • convertit les données de la requête de character_set_connection avant d'effectuer des opérations internes ; est le jeu de caractères de fonctionnement interne, et la méthode de détermination est la suivante :

    • Utilisez la valeur de paramètre CHARACTER SET du champ dans le tableau

    • Si Si la valeur ci-dessus n'existe pas, utilisez la valeur de paramètre DEFAULT CHARACTER SET de la table de données correspondante (extension MySQL, standard non SQL

    • Si le) ; La valeur ci-dessus n'existe pas, utilisez la valeur DEFAULT de la valeur de paramètre CHARACTER SET de la base de données correspondante

    • Si la valeur ci-dessus n'existe pas, utilisez la valeur de paramètre

      . character_set_server

  • convertit le résultat de l'opération du jeu de caractères d'opération interne en

    , en réponse à la demande. character_set_results

03 Démarrage MySQL

Fichier de configuration my.cnf

Explication détaillée des problèmes de jeu de caractères MySQL (image)

jeu de caractères par défaut : Définir la commande mysql Le jeu de caractères par défaut pour les connexions de ligne

character-set-server : définit le jeu de caractères de fonctionnement interne du système (c'est-à-dire le caractère_set_server mentionné ci-dessus)
collation_server : définit le tri du jeu de caractères par défaut du système

04 PHP connexion MySQL (en prenant la méthode de connexion PDO comme exemple)

Deux façons courantes de définir le jeu de caractères

  • mysql:host=localhost;dbname=db_demo;charset= utf8mb4

  • PDO::MYSQL_ATTR_INIT_COMMAND => "DÉFINIR LES NOMS utf8mb4"

Résumé 05

  • Données Le jeu de caractères du champ du tableau doit être

    . Ceci est simplement obligatoire utf8mb4

  • Généralement, les jeux de caractères

    , character_set_client et sont les mêmes, et ils sont tous character_set_connection(Ces trois paramètres sont tous character_set_results par défaut. Sinon, les expressions emoji ne peuvent pas être réalisées. Pour la raison, veuillez vous référer au processus de conversion du jeu de caractères). utf8mb4utf8mb4

  • Le jeu de caractères utilisé pour se connecter à la base de données

    doit également être utf8mb4

  • ,

    et autres valeurs par défaut Le type de jeu de caractères n'est pas si important, mais il est préférable de le garder cohérentcharacter_set_servercharacter_set_database

  • Il y a en effet de nombreux pièges dans TP, éloignez-vous de TP

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:
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