2010-05-26 131 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)。