As informações fornecidas nesta resposta podem levar a práticas de programação inseguras.
As informações fornecidas aqui dependem muito da configuração do MySQL, incluindo (mas não se limitando a) a versão do programa, o cliente do banco de dados e a codificação de caracteres usada.
Consulte http://dev.mysql.com/doc/ refman/5.0/en/string-literals.html
MySQL recognizes the following escape sequences. \0 An ASCII NUL (0x00) character. \' A single quote (“'”) character. \" A double quote (“"”) character. \b A backspace character. \n A newline (linefeed) character. \r A carriage return character. \t A tab character. \Z ASCII 26 (Control-Z). See note following the table. \\ A backslash (“\”) character. \% A “%” character. See note following the table. \_ A “_” character. See note following the table.
Então você precisa
select * from tablename where fields like "%string \"hi\" %";
Embora como Bill Karwin observa abaixo , usar aspas duplas para delimitadores de string não é SQL padrão, portanto, é uma boa prática usar aspas simples. Isso simplifica as coisas:
select * from tablename where fields like '%string "hi" %';