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

Sql dove la clausola non funziona

AGGIORNAMENTO:OP aveva caratteri di nuova riga invisibili (\n) nel suo set di dati. @EternalPoster (e io) supponevamo che Trim avrebbe rimosso tutti gli spazi bianchi , ma Documentazione MySql Trim specifica solo spazi iniziali e finali .

Questo è quello che ho fatto:

-- for http://stackoverflow.com/questions/27203169/sql-query-not-work-for-google-com
-- and http://stackoverflow.com/questions/27202157/sql-where-clause-not-working

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

-- --------------------------------------------------------

DROP TABLE IF EXISTS `sites`;

--
--  structure for table `sites`
--
CREATE TABLE IF NOT EXISTS `sites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `site` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- data for table `sites`
--
INSERT INTO `sites` (`id`, `site`) VALUES
(1, 'xyz.com'),
(2, 'google.com'),
(3, 'example.com');

--
-- select google
--
SELECT * 
FROM sites 
WHERE site = 'google.com'
;

--
-- select google
--
SELECT * 
FROM sites 
WHERE site = 'google.com'
;

e questo è quello che ho ottenuto:

Quindi, nel mio caso, vedo lo script funzionare come previsto.

Qual è la differenza nel tuo caso?La mia installazione è una configurazione abbastanza predefinita.Il fatto che Like '%google.com%' funziona sul tuo set di dati suggerisce un paio di cose. La gente ha già suggerito TRIM , perché l'espressione Like corrisponderebbe a caratteri invisibili (spazi, tabulazioni, backspace, null). MySQL ha un operatore separato REGEXP per le espressioni regolari, quindi non sembrerebbe che il . il carattere viene utilizzato come carattere jolly, ma potrebbe valere la pena dare un'occhiata.

Crea un database vuoto e prova a eseguire il mio script sopra. Ottieni il mio stesso risultato?