In un DBMS decente, il motore DB riconoscerebbe che non vi erano caratteri jolly nella stringa e lo trasformava implicitamente in un'uguaglianza pura (non necessariamente uguale a =
). Quindi, all'inizio riceverai solo un piccolo calo di prestazioni, solitamente trascurabile per qualsiasi query di dimensioni decenti.
Tuttavia, l'operatore MySQL =
non agisce necessariamente come previsto (come puro controllo di uguaglianza). In particolare, non di default tiene conto gli spazi finali per CHAR
e VARCHAR
di dati, il che significa che:
SELECT age WHERE name = 'pax'
vi darà le righe per 'pax'
, 'pax<one space>'
e'pax<a hundred spaces>'
.
Se si vuole fare una vera e propria verifica uguaglianza, si utilizza la parola chiave binary
:
SELECT field WHERE name = binary 'pax'
È possibile verificare questo con qualcosa di simile:
mysql> create table people (name varchar(10));
mysql> insert into people value ('pax');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('notpax');
mysql> select count(*) from people where name like 'pax';
1
mysql> select count(*) from people where name = 'pax';
4
mysql> select count(*) from people where name = binary 'pax';
1
Baring completamente braindead implementazione, il costo di entrambi i gusti di confronto delle stringhe sarà ridotto al minimo dal costo di spostare i dati dal disco. Scrivi cosa intendi veramente e vai avanti con la programmazione. –
Questo è stato precedentemente coperto [qui] (http://stackoverflow.com/questions/543580/equals-vs-like) su stackoverflow. Spero che aiuti. – user34867
Grazie, ho cercato questo prima di postare ma non l'ho visto in qualche modo. – mluebke