2013-02-25 22 views
8

Ho un comportamento molto strano che non riesco a capire nel mio DB SQL (sto usando MySQL 5.5.8):SQL: LIKE vs = bug?

Ho in una tabella un varchar (10) un nome: joe.

Se una corsa di SQL come questo:

SELECT ID FROM `names` WHERE `name` = 'joe ' 

ottengo un risultato:. Joe ma questo è sbagliato in quanto nella tabella non ho alcun 'Joe' (con uno spazio alla fine mi avere solo 'Joe' (senza spazi)

Tuttavia, se eseguo:

SELECT ID FROM `names` WHERE `name` LIKE 'joe ' 

ottengo come mi aspetto:. niente Per quanto ne so = dovrebbero essere "esatta" di corrispondenza, mentre come è più sciolto per essere in grado di usarlo con sottostringhe e%.

Cosa mi manca?

+0

Questo è come è stato progettato. È nei documenti http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like –

+0

come è un duplicato? –

risposta

10

Gli spazi finali non sono significativi per il confronto CHAR o VARCHAR utilizzando =. Vedere string comparison functions:

In particolare, spazi finali sono significativi, che non è vero per CHAR o VARCHAR confronti eseguiti con l'operatore =:

mysql> SELECT 'a' = 'a ', 'a' LIKE 'a '; 
+------------+---------------+ 
| 'a' = 'a ' | 'a' LIKE 'a ' | 
+------------+---------------+ 
|   1 |    0 | 
+------------+---------------+ 
1 row in set (0.00 sec) 
+1

Grazie per la risposta ho controllato la documentazione e hai perfettamente ragione, anche se mi sembra un po 'strano :) ma finché è documentato ... :) è una caratteristica non un bug – dk766

0

Credo che questo sia a causa del tipo di dati tu stai usando.

I tipi CHAR e VARCHAR sono simili, ma differiscono per il modo in cui sono memorizzati e recuperati . A partire da MySQL 5.0.3, differiscono anche per la lunghezza massima e se gli spazi finali vengono mantenuti.

http://dev.mysql.com/doc/refman/5.0/en/char.html