2010-05-26 128 views
1

我正在使用帶有全文索引的php + mysql。 我在我想搜索的字段中包含以下內容:mysql全文搜索和特殊字符

「您好:這是測試!」

「你好,我也是考驗!」

當我搜索「hello:」時,它找到兩行。 但它應該只找到第一行 - 至少直到我搜索「你好%」。 冒號似乎不被視爲「正常」charakter。

+0

爲什麼不能找到「你好:這是一個測試」「你好:」?如果您希望搜索不區分大小寫,則必須對索引列使用二進制排序規則(以* _bin *結尾) – Konerak 2010-05-26 08:14:33

+0

@Konerak:但是二進制排序規則會使搜索條件敏感*和ben搜索已經不區分大小寫。他只是在尋找一種只搜索單詞的方法。 – pinkgothic 2010-05-26 08:18:02

+0

如果查詢包含特殊字符,爲什麼不直接返回null? – Amarghosh 2010-05-26 08:27:21

回答

0

這可能會很晚,但我不能重現您的問題。

我有一個表,你的兩個條目:

Table: Test 
ID Note 
-- --------- 
1 Hello: it's a test! 
2 Hello i am also a test! 

如果我運行了第一個搜索SELECT * FROM test t WHERE Note LIKE "Hello:"我得到0行的結果,如預期的,因爲在這種情況下,LIKE查找與整場完全匹配。

如果我跑你的第二個聲明SELECT * FROM test t WHERE Note LIKE "Hello:%"我得到一個行回來:

ID Note 
-- --------- 
1 Hello: it's a test! 

你確定你已經安裝了全文索引表吧?

首先,您的Table引擎必須是MyISAM表。然後,您需要爲FULLTEXT類型的列創建索引(索引)(在我的示例中爲Note)。