Maison  >  Article  >  base de données  >  Comment MySQL gère-t-il les signes diacritiques dans les jeux de caractères et les classements ?

Comment MySQL gère-t-il les signes diacritiques dans les jeux de caractères et les classements ?

DDD
DDDoriginal
2024-10-25 20:55:02899parcourir

How does MySQL handle diacritics in character sets and collations?

Mappage des caractères du jeu de caractères MySQL

Dans MySQL, le comportement par défaut de nombreux classements Unicode, y compris utf8_general_ci et utf8_unicode_ci, consiste à mapper les caractères avec signes diacritiques, tels que « åäö », à leurs caractères de base sans signes diacritiques, tels que « aao ». Cela signifie que les requêtes utilisant des caractères diacritiques ne produisent pas toujours les résultats attendus.

Ce comportement affecte les requêtes dans les contextes de terminal et PHP. Cela découle des règles spécifiques de codage et de classement des caractères utilisées par MySQL.

Raisons du mappage

Le mappage des caractères diacritiques avec leurs caractères de base est destiné à fournir une expérience de recherche plus générale et cohérente. En traitant les caractères avec et sans signes diacritiques comme équivalents, la base de données peut renvoyer des résultats qui satisfont un plus large éventail de requêtes des utilisateurs.

Désactivation du mappage

Si vous souhaitez désactiver ce mappage et effectuer des recherches sensibles à la casse tout en préservant les caractères diacritiques, vous pouvez utiliser les méthodes suivantes :

  • Utiliser un classement qui préserve les signes diacritiques :
    Basculer vers un classement qui traite différemment les caractères avec et sans signes diacritiques. Un exemple est utf8_bin, qui effectue une comparaison binaire de chaînes.
  • Spécifier le classement pour des requêtes spécifiques :
    Lors de l'exécution de requêtes, vous pouvez spécifier explicitement le classement à l'aide du mot-clé COLLATE. . Par exemple, vous pouvez utiliser la requête suivante pour conserver les signes diacritiques :

    <code class="sql">select * from topics where name COLLATE utf8_bin = 'Harligt';</code>

Alternatives

Si vous avez besoin de recherches non sensibles à la casse sans le conversion tréma, vous pouvez envisager d'utiliser un index de texte intégral avec le tokenizer ASCII_WS. Ce tokenizer ignore la ponctuation et les signes diacritiques, permettant des recherches efficaces insensibles à la casse.

Conclusion

Le traitement par MySQL des caractères diacritiques peut affecter le comportement des requêtes de recherche. Comprendre les règles de mappage par défaut et choisir les options de classement appropriées est crucial pour garantir que les requêtes reflètent avec précision les critères de recherche prévus.

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