2011-10-28 51 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'

在這兩個地方使用相同的語法。