2011-10-28 34 views
0

我有如下表:MySQL的SELECT WHERE LIKE转义的数据

-- 
-- Table structure for table `DESTINATIONS` 
-- 

CREATE TABLE IF NOT EXISTS `DESTINATIONS` (
    `DEST_ID` int(7) NOT NULL auto_increment, 
    `COUNT_ID` int(6) NOT NULL, 
    `REG_ID` int(6) NOT NULL, 
    `CITY_ID` int(6) NOT NULL, 
    `CREATE_DATE` datetime NOT NULL, 
    `DESTINATION` varchar(256) NOT NULL, 
    `APPROVED` tinyint(1) NOT NULL, 
    PRIMARY KEY (`DEST_ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=192 ; 

-- 
-- Dumping data for table `DESTINATIONS` 
-- 

INSERT INTO `DESTINATIONS` (`DEST_ID`, `COUNT_ID`, `REG_ID`, `CITY_ID`, `CREATE_DATE`, `DESTINATION`, `APPROVED`) 
VALUES (166, 9, 818, 0, '2011-10-27 15:24:20', 'Freeman\\''s Bay', 0); 

,我试图运行下面的查询:

SELECT * 
FROM `DESTINATIONS` 
WHERE `DESTINATION` LIKE '%Freeman\'s Bay%' 

这是返回0的结果。然而,在引号之前剥离LIKE子句将会发现并返回一个匹配。

很明显,我做错了什么,但我一直无法弄清楚究竟是什么。我可以不执行一个SELECT LIKE这个吗?我是否错误地避开了引号?任何输入是赞赏!

+0

也许我在这里引起了一些混淆 - CREATE TABLE和INSERT在.SQL文件中,并且转义为将'Freeman \'Bay'插入到数据库中。 – DaveL

+0

感谢您的理解。但为什么你需要存储转义的数据? – GolezTrol

+0

我试图存储一个字面引号,并没有与SQL命令的结尾相混淆,因此它必须被转义。 – DaveL

回答

2

插入被错误地转义。您实际上插入的值为 Freeman\'s Bay,其中包括 \。选择是可以的。

select被错误地转义。您需要插入值Freeman\'s Bay,但您正在寻找Freeman's Bay,不包括\

+0

这是我需要插入,我不能插入单引号未转义? – DaveL

+0

是的,但它现在双重逃脱。双反斜杠被解释为单个反斜杠,我认为两个单引号也被解释为单引号。所以现在,你在数据库中插入一个实际的反斜杠,我认为这不是你的意思。您只需要在INSERT语句中转义单引号,以使语句有效。 – GolezTrol

+0

弗里曼湾是我想要在数据库中出现的,我已经确认这是插入的内容。问题是在插入之后选择此记录。 – DaveL

1

'%Freeman\'s Bay%''Freeman\\''s Bay'甚至明显不同(显然不包括%)。如果你固定你想成为你的格式,你会很好

+0

也许我在这里引起了一些混淆 - CREATE TABLE和INSERT在.SQL文件中,并且它被转义为将'Freeman \'Bay'插入到数据库中。 – DaveL

0

您是否尝试编写LIKE字符串,因为它出现在INSERT语句中,但两端都是%?

+0

我试过这个,我仍然没有得到任何返回的行。 – DaveL

0

您是否尝试过使用重复引号而不是转义?因此:'Freeman''s Bay'

在这两个地方使用相同的语法。