2016-10-21 1 views
0

Je table comme ceci:MySQL sélectionner par la différence entre les caractères minuscules et majuscules

Table name: hash_table 
---------------- 
id  hash 
---------------- 
1   abc 
2   aBc 
3   abC 
4   AbC 
5   ABc 
---------------- 

Il y a différence entre minuscules et majuscules. Par exemple abc inégale aBc.

Dans cette requête, renvoyer toutes les lignes:

SELECT * FROM `hash_table` WHERE `hash` = "abc" 

Par la recherche dans stackoverflow, quelques réponses parlent UPPER, LOWER et UCASE utilisation dans la requête de sélection, mais ils retournent toutes les lignes.

Existe-t-il un moyen de renvoyer uniquement la ligne correcte?

Répondre

1

La comparaison de chaînes pouvait être effectuée en sql de deux manières distinctes ..binary et non binaire .. Si vous ne lancez pas binaire .. la comparaison est cas insentive .. si vous utilisez binaire la comparaison est faite par byte et est également sensible cas ..

essayez d'utiliser

SELECT * FROM `hash_table` WHERE BINARY `hash` = BINARY "abc" 
+0

Merci ❤️ je teste cela et il est correct. Mais la colonne 'hash' est' varchar' et 'utf8_general_ci', ce code n'a pas de problème par ceci? – mghhgm

+0

Vous pouvez regarder http://dev.mysql.com/doc/refman/5.7/en/charset-general.html – scaisEdge

+1

Et n'oubliez pas que vous pouvez convertir le jeu de caractères et la collection à la volée si vous avez besoin de une sélection doit être assumée par rdbms le même jeu de caractères de la table. – scaisEdge