2016-11-01 1 views
0

Dans ma base de données j'ai deux formes du même mot. Ainsi, par exemple, lorsque je cherche amor, j'obtiens amor et āmōr. Comment puis-je récupérer seulement āmōr de la base de données.Sélectionnez parmi plusieurs sorties celle avec des caractères spéciaux dans mysql

+0

Et votre position actuelle 'COLLATION' est? Jetez un coup d'œil à 'utf8_bin' et lisez en général la recherche fulltext. Dupe possible: http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql – ficuscr

+0

@ficuscr Dans mon cas, j'ai l'entrée 'amor' sans caractères spéciaux et je suis la recherche de la forme 'àmōr' –

Répondre

1

Si vous ne voulez pas mess avec Collation (pour une raison quelconque):

SELECT a.text 
FROM table a 
WHERE a.text = 'amor' 
AND BINARY(a.text) = BINARY('amor') 

J'ai quitté la première condition avec le texte pour que MySQL peut utiliser un index sur text, dans le cas où existe. La deuxième condition s'assurera que vous obtenez seulement le texte exact (y compris la capitalisation) que vous avez recherché.

EDIT: Basé sur le commentaire.

Si vous voulez obtenir le résultat accentué, vous devez utiliser un classement qui ignore ces accents. Celui que vous devez utiliser dépend de la collation de la colonne ..

Essayez une des solutions ci-dessous:

SELECT a.text 
FROM table a 
WHERE a.text = 'amor' 
COLLATE 'utf8_general_ci'; 

Ou:

SELECT a.text 
FROM table a 
WHERE a.text = 'amor' 
COLLATE 'latin1_general_ci'; 

EDIT # 2: Sur la base de plus commentaires.

Pour obtenir toujours la version accentuée dans le cas où il y a plus d'un match:

SELECT a.text 
FROM table a 
WHERE a.text = 'amor' -- this condition returns both results 
ORDER BY LENGTH(BINARY(a.text)) DESC 
LIMIT 1 
+0

Cela ne fonctionnerait pas dans mon cas, car je ne cherche pas l'entrée exacte. Je cherche une possibilité où je peux entrer le "amor" normal et je reçois le "āmōr" avec des caractères spéciaux. –

+0

@ChrisWinterbottom - voir si l'édition aide .. – Galz

+0

pour 'utf8_general_ci' la requête ne fonctionne pas, pour 'latin1_general_ci' je reçois toujours les deux résultats ... –