Mysql
 sql >> Base de données >  >> RDS >> Mysql

Flux de travail UTF8 PHP, MySQL résumé

  • mb_internal_encoding('UTF-8') ne fait rien par lui-même, il définit uniquement le paramètre d'encodage par défaut pour chaque mb_ une fonction. Si vous n'utilisez aucun mb_ fonction, cela ne fait aucune différence. Si c'est le cas, il est logique de le définir afin que vous n'ayez pas à passer le $encoding paramètre à chaque fois individuellement.
  • IMO mb_detect_encoding est la plupart du temps inutile car il est fondamentalement impossible de détecter avec précision l'encodage d'un texte inconnu. Vous devez soit savoir dans quel encodage se trouve un blob de texte parce que vous avez une spécification à ce sujet, soit vous devez analyser les métadonnées appropriées comme les en-têtes ou les balises méta où l'encodage est spécifié.
  • Utilisation de mb_check_encoding vérifier si un blob de texte est valide dans l'encodage dans lequel vous vous attendez est généralement suffisant. Si ce n'est pas le cas, supprimez-le et générez une erreur appropriée.
  • Concernant :

    Si vous manipulez des chaînes contenant des caractères multioctets, alors oui, vous devez utiliser le mb_ fonctions pour éviter d'obtenir des résultats erronés. Les fonctions de chaîne de base ne fonctionnent qu'au niveau de l'octet, pas au niveau du caractère, ce que vous voulez généralement lorsque vous travaillez avec des chaînes.

  • utf8_general_ci vs utf8_bin ne fait une différence que lors de la collecte , c'est-à-dire trier et comparer des chaînes. Avec utf8_bin les données sont traitées sous forme binaire, c'est-à-dire que seules les données identiques sont identiques. Avec utf8_general_ci une certaine logique est appliquée, par ex. "é" est trié avec "e" et les majuscules sont considérées comme égales aux minuscules.