Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment comparer des chaînes pour un seul espace

Un BINARY comparaison des deux chaînes est nécessaire pour une correspondance exacte

Dans des circonstances normales, les espaces de fin ne sont pas pris en compte dans la comparaison, mais le BINARY l'opérateur le force à être :

mysql> SELECT BINARY '   ' = ' ';
+--------------------+
| BINARY '   ' = ' ' |
+--------------------+
|                  0 |
+--------------------+

Incidemment, ce ne sont pas seulement les comparaisons d'espaces uniquement qui sont affectées par le problème des espaces blancs de fin :

mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+

...mais...

mysql> SELECT BINARY 'abc   ' = 'abc';
+-------------------------+
| BINARY 'abc   ' = 'abc' |
+-------------------------+
|                       0 |
+-------------------------+

...et encore plus déroutant, l'espace blanc de tête est significatif :

mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+

Concernant l'indexation :

BINARY empêchera l'utilisation d'un index sur la colonne de caractères. Cependant, une note sur la documentation suggère que l'index sera être utilisé si le BINARY L'opérateur est appliqué au côté littéral de la chaîne de la comparaison comme dans :

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '