sql >> Databasteknik >  >> RDS >> Mysql

Hur man sträng-jämföra för ett enda utrymme

En BINARY jämförelse av de två strängarna krävs för en exakt matchning

Under normala omständigheter beaktas inte efterföljande blanksteg i jämförelsen, utan BINARY operatören tvingar det att vara:

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

För övrigt är det inte bara jämförelser av blanksteg som påverkas av det avslutande problemet med blanksteg:

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

...men...

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

...och ännu mer förvirrande, ledande blanksteg är betydande:

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

Angående indexering:

BINARY kommer att förhindra att ett index används i teckenkolumnen. Men en notering om dokumenten föreslår att indexet kommer användas om BINARY operatorn tillämpas på strängens bokstavliga sida av jämförelsen som i:

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


  1. Skillnaden mellan oracle DATE och TIMESTAMP

  2. Hur kan jag generera en unik sträng per post i en tabell i Postgres?

  3. "Kan inte släppa utlösaren" Fel när du försöker släppa en inloggningsutlösare? Prova detta.

  4. Skapa en virtuell maskin med Oracle VM Virtual Box