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

Come posso cercare una frase come O'% in MySql?

Stavi iniettando una barra rovesciata letterale. Questo basta:

SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

Per testare:

SELECT 'O\\\'Brien', 'O\'Brien'

Aggiornamento: C'è già una risposta accettata, quindi aggiungo solo un paio di chiarimenti.

Innanzitutto, avevo trascurato il fatto che i dati archiviati erano danneggiati. Inutile dire che questo spiega perché person_sname = 'O\\\'Brien' è vero.

Secondo, il \ carattere ha due usi nella sintassi MySQL:

  1. È il carattere utilizzato per comporre sequenze di escape :\n , \t ...
  2. È il carattere di escape predefinito per inserire il letterale % e _ caratteri in espressioni LIKE :foo LIKE '%abc\%def%'

Il problema è che si inserisce un \ il simbolo in un'espressione LIKE attiva entrambi i comportamenti, quindi è necessario inserirne quattro barre inverse per ottenerne uno :

person_sname like 'O\\\\\'Brien'

... a meno che tu non modifichi il secondo significato con ESCAPE clausola:

person_sname like 'O\\\'Brien' escape '|'

Naturalmente, se i dati non sono stati danneggiati, puoi semplicemente:

person_sname = 'O\'Brien'
person_sname like 'O\'Brien'