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 '