Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie man Zeichenfolgen für ein einzelnes Leerzeichen vergleicht

Ein BINARY Vergleich der beiden Zeichenfolgen ist für eine exakte Übereinstimmung erforderlich

Im Normalfall werden abschließende Leerzeichen beim Vergleich nicht berücksichtigt, sondern der BINARY Operator zwingt es zu:

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

Übrigens sind nicht nur reine Whitespace-Vergleiche von dem Problem mit nachgestellten Whitespaces betroffen:

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

...aber...

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

...und noch verwirrender ist, dass führendes Leerzeichen ist signifikant:

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

Zur Indexierung:

BINARY verhindert, dass ein Index für die Zeichenspalte verwendet wird. Allerdings eine Anmerkung zur Dokumentation legt nahe, dass der Index wird verwendet werden, wenn die BINARY Der Operator wird wie in:

auf die Zeichenfolgenliteralseite des Vergleichs angewendet
SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '