Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Where-Klausel funktioniert nicht

UPDATE:OP hatte unsichtbare Zeilenumbruchzeichen (\n) in seinem Datensatz. @EternalPoster (und ich) nahmen an, dass Trim alle Leerzeichen entfernen würde , aber MySql Trim-Dokumentation gibt nur Leerzeichen am Anfang und am Ende an .

Folgendes habe ich getan:

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

und das habe ich bekommen:

In meinem Fall sehe ich also, dass das Skript wie erwartet funktioniert.

Was ist an Ihrem Fall anders? Meine Installation ist eine ziemlich standardmäßige Einrichtung. Die Tatsache, dass Like '%google.com%' Arbeiten an Ihrem Datensatz schlägt ein paar Dinge vor. Leute haben bereits TRIM vorgeschlagen , da der Like-Ausdruck mit unsichtbaren Zeichen (Leerzeichen, Tabulatoren, Backspaces, Nullen) übereinstimmen würde. MySQL hat einen separaten Operator REGEXP für reguläre Ausdrücke, also scheint es nicht so zu sein, dass . Zeichen wird als Platzhalter verwendet, aber das könnte einen Blick wert sein.

Erstellen Sie eine leere Datenbank und versuchen Sie, mein obiges Skript auszuführen. Erhalten Sie das gleiche Ergebnis wie ich?