A BINARY
comparación
de las dos cadenas se requiere para una coincidencia exacta
En circunstancias normales, los espacios en blanco finales no se consideran en la comparación, pero el BINARY
el operador fuerza que sea:
mysql> SELECT BINARY ' ' = ' ';
+--------------------+
| BINARY ' ' = ' ' |
+--------------------+
| 0 |
+--------------------+
Por cierto, no son solo las comparaciones de solo espacios en blanco las que se ven afectadas por el problema de los espacios en blanco al final:
mysql> SELECT 'abc ' = 'abc';
+------------------+
| 'abc ' = 'abc' |
+------------------+
| 1 |
+------------------+
...pero...
mysql> SELECT BINARY 'abc ' = 'abc';
+-------------------------+
| BINARY 'abc ' = 'abc' |
+-------------------------+
| 0 |
+-------------------------+
... y aún más confuso, el espacio en blanco inicial es significativo:
mysql> SELECT ' abc ' = 'abc';
+-------------------+
| ' abc ' = 'abc' |
+-------------------+
| 0 |
+-------------------+
Con respecto a la indexación:
BINARY
evitará que se use un índice en la columna de caracteres. Sin embargo, una nota sobre los documentos
sugiere que el índice podrá ser usado si BINARY
El operador se aplica al lado literal de cadena de la comparación como en:
SELECT * FROM `tbl` WHERE `col` = BINARY 'string '