Mysql
 sql >> Base de données >  >> RDS >> Mysql

La clause sql where ne fonctionne pas

MISE À JOUR :OP avait des caractères de retour à la ligne invisibles (\n) dans son jeu de données. @EternalPoster (et moi) avons supposé que Trim supprimerait tous les espaces blancs , mais Documentation MySql Trim spécifie les espaces de début et de fin uniquement .

Voici ce que j'ai fait :

-- 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'
;

et voici ce que j'ai :

Donc, dans mon cas, je vois le script fonctionner comme prévu.

En quoi votre cas est-il différent ? Mon installation est une configuration par défaut. Le fait que Like '%google.com%' fonctionne sur votre ensemble de données suggère quelques choses. Les gens ont déjà suggéré TRIM , car l'expression Like correspondrait à des caractères invisibles (espaces, tabulations, retours arrière, valeurs nulles). MySQL a un opérateur distinct REGEXP pour les expressions régulières, il ne semblerait donc pas que le . Le caractère est utilisé comme caractère générique, mais cela vaut peut-être le coup d'œil.

Créez une base de données vide et essayez d'exécuter mon script ci-dessus. Obtenez-vous le même résultat que moi ?