Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como comparar string para um único espaço


Um BINARY comparação das duas strings é necessário para uma correspondência exata

Em circunstâncias normais, o espaço em branco à direita não é considerado na comparação, mas o BINARY operador força a ser:
mysql> SELECT BINARY '   ' = ' ';
+--------------------+
| BINARY '   ' = ' ' |
+--------------------+
|                  0 |
+--------------------+

Aliás, não são apenas as comparações de espaço em branco que são afetadas pelo problema de espaço em branco à direita:
mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+

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

...e ainda mais confuso, o espaço em branco principal é significativo:
mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+

Em relação à indexação:


BINARY impedirá que um índice seja usado na coluna de caracteres. No entanto, uma nota sobre os documentos sugere que o índice vai ser usado se o BINARY operador é aplicado ao lado literal da string da comparação como em:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '