MySQL diacritique recherche insensible (accents espagnols)
J'ai une base de données MySQL avec les mots contenant des accents en espagnol (áéíóú). Je voudrais savoir si il y a moyen de faire un diacritique recherche insensible. Par exemple, si je recherche pour "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 suivante:
$result = mysql_query("SELECT * FROM $lookuptable WHERE disabled = '0' AND name LIKE '%$q%' OR productCode LIKE '%$q%' LIMIT $sugglimit");
C'est pour une boutique en ligne, donc je ne sais pas ce que les gens seront à la recherche de... "lapiz" est juste un exemple.
le texte d'alt http://www.freeimagehosting.net/uploads/0e7c2ae7d5.png
Merci!
Vous avez oublié
ü
(comme dans pingüino).OriginalL'auteur Hectorcr7 | 2010-07-21
Vous devez vous connecter pour publier un commentaire.
Jeux de caractères & les classements, c'est pas mon favoris, mais ils FONT un travail:
Un beau chapitre à lire dans le manuel:Jeu De Caractères De Soutien
OriginalL'auteur Wrikken
Si vous définissez la table du jeu de caractères UTF-8 et le classement utf8_*_ci (_ci signifie "insensible à la casse) MySQL va effectuer les cas et les accents les recherches par défaut
Lire plus sur les jeux de caractères et les classements ici:
http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html
Je l'ai testé et
Vous pouvez configurer le classement de votre table lors de la création:
Ou vous pouvez
ALTER
s'il existe déjà.Pour plus d'info, lire le manuel (lien ci-dessus).Si vous êtes à l'aide de phpMyAdmin, vous pouvez sélectionner le classement lorsque vous créez votre table.
reportez-vous à modifier
J'ai modifié mon tableau (CubeCart_inventory) à uft_general8_ci et ne fonctionne toujours pas bien. J'ai modifié ma table avec phpmyadmin (se reporter à l'image dans le post original). Ma page web est http://www.carrodelectronica.com
OriginalL'auteur NullUserException
Vous pouvez forcer le nom de la colonne à convertir comme UTF8. Je n'ai pas essayé est pour l'espagnol, mais plutôt pour le roumain caractères avec accents, mais je suppose que c'est la même chose.
La requête que j'utilise est:
Ou dans le cas probable de la recherche d'une colonne dans une table, vous pouvez utiliser:
OriginalL'auteur Radu
Stocker une deuxième version de la chaîne qui a été dépouillé de signes diacritiques?
Ce que l'Ambre voulais dire, c'est de 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, et la réponse à venir.
J'ai entendu il y a un moyen pour configurer mySQL en UTF8 et de cette façon vous pouvez faire diacritique comparaison insensible à la casse. Savez-vous quelque chose à ce sujet?
OriginalL'auteur Amber
Juste au cas où quelqu'un tombe sur ce problème, j'ai trouvé un moyen qui permet de résoudre le problème, au moins pour moi, sans jouer avec les jeux de caractères et les classements à l'intérieur des requêtes MySQL.
J'utilise PHP pour insérer et extraire des enregistrements de la base de données. Même si ma Base de données, les tables et les colonnes sont en utf8, ainsi que l'encodage des fichiers PHP, la vérité est que l'encodage utilisé dans la connexion entre PHP et MySQL sont réalisés à l'aide de latin1. J'ai réussi à trouver cette aide
$mysqli->character_set_name();
où $mysqli est votre objet.
Pour les recherches de commencer à travailler comme prévu, le retour ne respectent pas les accents et les cas insentive dossiers pour les caractères avec accents ou pas, j'ai explicitement définir le jeu de caractères de la connexion.
Pour ce faire, vous avez juste à faire ce qui suit:
$mysqli->set_charset('utf8');
où $mysqli est votre objet mysqli. Si vous avez une base de données de gestion de classe qui encapsule votre fonctionnalité de base de données, c'est facile à appliquer pour une complète application. Si non, vous devez définir explicitement partout où vous ouvrez une connexion.
J'espère que cela aide quelqu'un, que j'étais déjà en train d'halluciner sur ce sujet!
OriginalL'auteur BlunT