10
votes

MySQL DiaCritic Insensitive Search (Accents espagnols)

J'ai une base de données mysql avec des mots contenant des accents en espagnol (à © © ©ãº). J'aimerais savoir s'il y a un moyen de faire une recherche insensible à la diacritique. Par exemple, si je recherche "Lapiz" (sans accent), j'aimerais obtenir des résultats contenant le mot "Lápiz" de ma DB. La façon dont je suis en train de faire la requête est la suivante:

$result = mysql_query("SELECT * FROM $lookuptable WHERE disabled = '0' AND name LIKE '%$q%' OR productCode LIKE '%$q%' LIMIT $sugglimit");


1 commentaires

Vous avez oublié ü (comme dans pingüino ).


5 Réponses :


2
votes

stocker une deuxième version de la chaîne qui a été dépouillé de diacritiques?


3 commentaires

Je ne sais pas si je me suis expliqué moi-même. Disons $ q est égal à "Lapiz". J'ai besoin de récupérer les résultats de la DB contenant "Lápiz". Je pense que vous parlez lorsque $ q est égal à "Lápiz", puis vous désignez les diacritiques, ce qui est le contraire. Merci!


@Hecteur Quel ambre signifie stocker une copie de la chaîne sans les accents dans MySQL. Ensuite, vous pouvez toujours effectuer une recherche sur cette colonne. Ce n'est pas nécessaire cependant, répondez à venir.


J'ai entendu dire qu'il y a un moyen de mettre MySQL sur UTF8 et de cette façon, vous pouvez faire une comparaison insensible à la diacritique. Savez-vous quoi que ce soit à ce sujet?



22
votes

Ensembles de caractères et collations, pas mes favoris, mais ils fonctionnent: xxx

Un bon chapitre à lire dans le manuel: Set de caractère Support


0 commentaires

7
votes

Si vous définissez la table Charset sur UTF-8 et la collation sur UTF8 _ * _ CI (_ci signifie «insensible à l'insensibilité) MySQL effectuera des recherches insensibles de cas et d'accentuation par défaut

En savoir plus sur les caractères et les collations ici: < BR> http://dev.mysql.com/doc/refman/5.1 /en/charset-charsets.html

J'ai testé et xxx

Vous pouvez configurer la classée de votre table lors de la création: xxx

ou vous pouvez alter s'il existe déjà.Pour plus d'informations, lisez le manuel (lien ci-dessus).
Si vous utilisez phpmyadmin, vous pouvez sélectionner la classement lorsque vous créez votre table.


2 commentaires

Comment puis-je régler la table? Je ne suis pas très familier avec MySQL. Merci!


J'ai modifié ma table (cubecart_inventory) sur uft_general8_ci et ne fonctionne toujours pas bien. J'ai modifié ma table avec phpmyadmin (voir image dans l'article original). Ma page Web est www.carrodelectronica.com



6
votes

Vous pouvez forcer le nom de la colonne à convertir en UTF8. Je n'ai pas essayé, c'est pour les personnages espagnols, mais plutôt pour des personnages roumains avec des accents, mais je suppose que c'est la même chose.

La requête que j'utilise est la suivante: p>

SELECT CONVERT(column_name USING utf8) FROM table_name LIKE '%giga%'


0 commentaires

2
votes

Juste au cas où quelqu'un d'autre change sur cette question, j'ai trouvé un moyen qui résout le problème, du moins pour moi, sans gâcher avec des ensembles de caractères et des collations à l'intérieur des requêtes MySQL.

J'utilise PHP pour insérer et récupérer des enregistrements de la base de données. Même si ma base de données, mes tables et colonnes sont UTF8, ainsi que l'encodage des fichiers PHP, la vérité est que le codage utilisé dans la connexion entre PHP et MySQL est en cours d'utilisation de latin1. J'ai réussi à trouver cela en utilisant $ mysqli-> caractère_set_name (); où $ mysqli est votre objet.

Pour que les recherches commencent à fonctionner comme prévu, renvoient des enregistrements insensibles insensibles et insensives d'accent pour des caractères avec des accents ou non, je dois définir explicitement l'ensemble de caractères de la connexion.

Pour ce faire, il suffit de faire ce qui suit: $ mysqli-> set_charset ('utf8'); où $ mySQLI est votre objet mysqli. Si vous avez une classe de gestion de base de données qui envoie votre fonctionnalité de base de données, il est facile de s'appliquer à une application complète. Sinon, vous devez définir cela explicitement partout où vous ouvrez une connexion.

J'espère que cela aide quelqu'un de sortir, car je panais déjà de cela!


1 commentaires

Tu as sauvé ma vie, ça me dérangeait depuis si longtemps! Merci, c'était la réponse dont j'avais besoin.