sql >> Database teknologi >  >> RDS >> Mysql

Sådan string-sammenligne for en enkelt plads

En BINARY sammenligning af de to strenge er påkrævet for et nøjagtigt match

Under normale omstændigheder tages der ikke efter mellemrum med i sammenligningen, men BINARY operatør tvinger det til at være:

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

Det er i øvrigt ikke kun sammenligninger, der kun er hvide mellemrum, der påvirkes af det efterfølgende hvide mellemrumsproblem:

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

...men...

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

...og endnu mere forvirrende er det førende mellemrum er væsentlig:

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

Angående indeksering:

BINARY forhindrer et indeks i at blive brugt på tegnkolonnen. Dog en note om dokumenterne foreslår, at indekset vil bruges, hvis BINARY operator anvendes på strengens literal side af sammenligningen som i:

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


  1. Forskellen mellem Oracle jdbc driver klasser?

  2. Fatal fejl:Kald til et medlem funktion query() på null

  3. nullvalue:Vis NULL-værdier i SQLite

  4. Tjek og optimer MySQL-databasen automatisk med Crontab/Cron