MySQL : recherche insensible aux diacritiques pour les accents espagnols
Dans les bases de données MySQL, la gestion des mots avec des accents espagnols peut être difficile lors de l'exécution de recherches. Cet article fournit une solution pour réaliser des recherches insensibles aux signes diacritiques, vous permettant de récupérer des mots avec ou sans accents comme vous le souhaitez.
Requête avec des accents
À titre d'exemple, considérons le requête ci-dessous :
$result = mysql_query("SELECT * FROM $lookuptable WHERE disabled = '0' AND name LIKE '%$q%' OR productCode LIKE '%$q%' LIMIT $sugglimit");
Cette requête vérifie à la fois les champs name et productCode pour le terme de recherche $q. Cependant, il ne renverra que les correspondances exactes, à l'exclusion des mots avec des accents.
Recherche insensible aux diacritiques
Pour réaliser une recherche insensible aux diacritiques, nous pouvons exploiter les jeux de caractères et les classements. Les classements définissent la façon dont les caractères sont comparés, et certains classements sont insensibles aux signes diacritiques.
Modification du jeu de caractères
En modifiant le jeu de caractères, nous pouvons modifier le classement et activer les signes diacritiques. recherche insensible. Par exemple :
SET NAMES latin1;
Test de la requête
Après avoir modifié le jeu de caractères, nous pouvons réexécuter la requête pour tester les résultats :
mysql> SET NAMES latin1; mysql> SELECT 'lápiz' LIKE 'lapiz'; +-----------------------+ | 'lápiz' LIKE 'lapiz' | +-----------------------+ | 0 | +-----------------------+
Comme vous pouvez le voir, la requête renvoie 0 même si le mot "'lápiz'" contient des accents. En effet, le jeu de caractères est défini sur latin1, qui est sensible à la casse et aux signes diacritiques.
Utilisation du classement UTF-8
Pour activer la recherche insensible aux signes diacritiques, nous pouvons utiliser le classement UTF-8. Les formats de transformation Unicode (UTF) sont des schémas de codage de caractères qui gèrent les caractères multi-octets et les signes diacritiques.
SET NAMES utf8;
Réexécution de la requête avec le jeu de caractères UTF-8 :
mysql> SET NAMES utf8; mysql> SELECT 'lápiz' LIKE 'lapiz'; +-----------------------+ | 'lápiz' LIKE 'lapiz' | +-----------------------+ | 1 | +-----------------------+
Désormais, la requête renvoie 1, indiquant que la recherche est insensible aux signes diacritiques.
Considérations supplémentaires
Pour garantir une recherche insensible aux signes diacritiques pour tout jeu de caractères, vous pouvez spécifier l'UTF -8 collationnement explicitement :
SELECT 'lápiz' LIKE _utf8'lapiz';
Cela garantit que le classement UTF-8 est utilisé pour la comparaison, quel que soit le jeu de caractères actuel.
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!