Maison  >  Article  >  base de données  >  Pourquoi \"Harligt\" et \"Härligt\" renvoient-ils les mêmes résultats dans MySQL ? Un regard sur le classement et la normalisation des caractères.

Pourquoi \"Harligt\" et \"Härligt\" renvoient-ils les mêmes résultats dans MySQL ? Un regard sur le classement et la normalisation des caractères.

DDD
DDDoriginal
2024-10-26 22:48:30425parcourir

Why Does

Le traitement des caractères spéciaux par MySQL : un paradoxe expliqué

Dans MySQL, l'exécution de requêtes impliquant des caractères spéciaux comme 'Å', 'Ä', et « Ö » soulève souvent des questions concernant la cohérence des résultats. Par exemple, les requêtes avec « Harligt » et « Härligt » donnent des résultats identiques, laissant les utilisateurs perplexes.

Ce phénomène est attribué aux paramètres de classement par défaut de MySQL, en particulier « utf8_general_ci » et « utf8_unicode_ci ». Ces classements normalisent certains caractères Unicode, y compris les lettres scandinaves, en les assimilant à leurs équivalents anglais (par exemple, « Ä = A »). Cette normalisation simplifie les opérations de comparaison et les recherches, mais peut s'avérer gênante dans certains scénarios.

Pour résoudre ce problème, envisagez les options suivantes :

  • Utiliser un classement différent : Les classements tels que "utf8_bin" préservent les valeurs de caractères, y compris les caractères spéciaux, mais peuvent avoir des implications pour d'autres opérations.
  • Spécifiez le classement dans les requêtes : Pour les requêtes spécifiques pour lesquelles vous souhaitez remplacer le classement par défaut , ajoutez "COLLATE utf8_bin" à la requête. Exemple :
select * from topics where name='Harligt' COLLATE utf8_bin;
  • Créer un classement personnalisé : Si aucune des solutions ci-dessus ne répond à vos besoins, vous pouvez créer un classement personnalisé qui répond à vos besoins spécifiques.

Il convient de noter que les opérations LIKE insensibles à la casse dans MySQL ne peuvent pas être effectuées sans la normalisation des caractères spéciaux. Cependant, des discussions connexes peuvent être trouvées ici :

  • [Recherche d'un classement MySQL insensible à la casse où « a » != « ä »](https://dba.stackexchange.com/questions/231116/ Looking-for-case-insensitive-mysql-collation-where-a-a)
  • [Recherche MYSQL sensible à la casse pour le champ utf8_bin](https://stackoverflow.com/questions/9704962/mysql-case-sensitive- recherche-utf8-bin-field)

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