350 votes

Comment puis-je faire des Comparaison de chaînes sensible à la casse de SQL sur MySQL ?

J’ai une fonction qui renvoie cinq caractères avec des casses différentes. Si je fais une requête sur cette chaîne, il retournera la valeur indépendamment de casse.

Comment puis-je faire des requêtes MySQL chaîne sensible à la casse ?

861voto

Craig White Points 5324

La bonne nouvelle est que si vous avez besoin de faire une requête sensible à octet, c’est très facile à faire:

Ou l’abrégée :

171voto

drudge Points 11479

http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

Le jeu de caractères par défaut et le classement sont latin1 et latin1_swedish_ci, donc non binaire des comparaisons de chaînes sont insensibles à la casse par défaut. Cela signifie que si vous effectuez une recherche avec nom_col LIKE 'a%', vous obtenez toutes les valeurs de colonne que de commencer avec Un ou une. Pour faire cette recherche sensible à la casse, assurez-vous que l'un des opérandes est un casse ou de classement binaire. Par exemple, si vous comparez une colonne et d'une chaîne de caractères qui ont tous deux le jeu de caractères latin1, vous pouvez utiliser le COLLATE opérateur pour cause l'un des deux opérandes ont la latin1_general_cs ou latin1_bin classement:

col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin

Si vous voulez une colonne de toujours être traités de la casse de la mode, de la déclarer avec une casse ou un classement binaire.

44voto

insoftservice Points 214

Au lieu d’utiliser le =, opérateur, vous pouvez utiliser comme ou comme binaire

Il faudra « a » et pas « A » dans son état

18voto

Eric Points 11

Faire utiliser un index avant d’utiliser le fichier binaire, vous pourriez faire quelque chose comme ça, si vous avez des tables volumineuses.

La sous-requête se traduirait par un vraiment petit sous-ensemble insensible à la casse dont vous sélectionnez ensuite le match seulement sensible à la casse.

7voto

fritzthecat Points 21

La suite est pour les versions de MySQL égal ou supérieur à 5,5.

Ajouter à /etc/mysql/my.cnf

  [mysqld]
  ...
  character-set-server=utf8
  collation-server=utf8_bin
  ...

Tous les autres classements, j'ai essayé semblait être sensible à la casse, seulement "utf8_bin" travaillé.

Ne pas oublier de redémarrer mysql après:

   sudo service mysql restart

Selon http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html il y a aussi un "latin1_bin".

Le "utf8_general_cs" n'a pas été acceptée par mysql démarrage. (J'ai lu "_cs" comme "sensible à la casse" - ???).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X