web-dev-qa-db-fra.com

Requête MySQL sensible à la casse

Cela a déjà été demandé sur ce site mais je n’ai pas trouvé de réponse suffisante. Si je fais une requête comme:

Select Seller from Table where Location = 'San Jose'

Comment puis-je le faire retourner uniquement aux vendeurs ayant l'emplacement "San Jose" au lieu de "san jose" ou autre chose?

167
Michael Liao

Les requêtes MySQL ne sont pas sensibles à la casse par défaut. Vous trouverez ci-dessous une requête simple qui recherche une "valeur". Cependant, il retournera 'VALUE', 'value', 'VaLuE', etc…

SELECT * FROM `table` WHERE `column` = 'value'

La bonne nouvelle est que si vous devez faire une requête sensible à la casse, il est très facile de le faire en utilisant l'opérateur BINARY , qui force une comparaison octet par octet:

SELECT * FROM `table` WHERE BINARY `column` = 'value'
405
James mason

Pour améliorer l'excellente réponse de James:

Mieux vaut mettre BINARY devant la constante:

SELECT * FROM `table` WHERE `column` = BINARY 'value'

Mettre BINARY devant column empêchera l’utilisation d’index sur cette colonne.

75
Shenxian

Bien que la réponse indiquée soit correcte, puis-je suggérer que si votre colonne doit contenir des chaînes sensibles à la casse, vous devez lire la documentation et modifier votre définition de table en conséquence.

Dans mon cas, cela revient à définir ma colonne comme suit:

`tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''

Ceci est à mon avis préférable pour ajuster vos requêtes.

22
Thomas Clowes