sql >> Base de Datos >  >> RDS >> Mysql

Cómo comparar cadenas para un solo espacio

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   '