Mysql
 sql >> Database >  >> RDS >> Mysql

Come confrontare le stringhe per un singolo spazio

Un BINARY confronto delle due stringhe è richiesta per una corrispondenza esatta

In circostanze normali, lo spazio bianco finale non viene considerato nel confronto, ma il BINARY l'operatore lo costringe a essere:

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

Per inciso, non sono solo i confronti di soli spazi bianchi a essere interessati dal problema degli spazi vuoti finali:

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

...ma...

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

... e ancora più confusamente, lo spazio bianco principale è significativo:

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

Riguardo all'indicizzazione:

BINARY impedirà l'utilizzo di un indice nella colonna dei caratteri. Tuttavia, una nota sui documenti suggerisce che l'indice sarà essere utilizzato se il BINARY viene applicato al lato letterale della stringa del confronto come in:

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