sql >> Database >  >> RDS >> Mysql

Hoe tekenreeks te vergelijken voor een enkele spatie

Een BINARY vergelijking van de twee strings is vereist voor een exacte overeenkomst

Onder normale omstandigheden wordt witruimte niet meegenomen in de vergelijking, maar de BINARY operator dwingt het te zijn:

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

Overigens zijn het niet alleen witruimtevergelijkingen die worden beïnvloed door het probleem met de achterblijvende witruimte:

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

...maar...

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

...en nog verwarrender, leidende witruimte is significant:

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

Over indexering:

BINARY voorkomt dat een index wordt gebruikt in de tekenkolom. Echter, een opmerking over de documenten suggereert dat de index zal worden gebruikt als de BINARY operator wordt toegepast op de letterlijke tekenreekszijde van de vergelijking zoals in:

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '


  1. ORA-00933:SQL-opdracht niet correct beëindigd

  2. hoe de max_allowed_packet mysql-variabele te controleren en in te stellen

  3. SQL Server Failover Cluster Installatie -3

  4. Hoe NULLIF() werkt in SQL Server