Php mysql中的“-”和“&”字符串存在问题

Php mysql中的“-”和“&”字符串存在问题,php,sql,mysql,Php,Sql,Mysql,我有一个PHP搜索引擎。当搜索正常时,一切正常。搜索文本为“company”,数据库中字段中有“company” 问题是当搜索文本为&company或-company,而数据为&company或-company时,没有匹配项。为什么? -和&字符串出现问题…请尝试将搜索词放在引号中。这将有助于mysql了解您在全文搜索中的字面意思: SELECT * FROM tablename MATCH (company) AGAINST ('"&company"' IN BOOLEAN MODE)

我有一个PHP搜索引擎。当搜索正常时,一切正常。搜索文本为“company”,数据库中字段中有“company”

问题是当搜索文本为&company或-company,而数据为&company或-company时,没有匹配项。为什么?


-和&字符串出现问题…

请尝试将搜索词放在引号中。这将有助于mysql了解您在全文搜索中的字面意思:

SELECT * FROM tablename MATCH (company) AGAINST ('"&company"' IN BOOLEAN MODE)

SELECT * FROM tablename MATCH (company) AGAINST ('"-company"' IN BOOLEAN MODE)

如果使用全文搜索,则&和-是保留字符。我找不到解决这个问题的好办法。我所做的只是删除特殊字符并运行全文搜索。例如,如果他们正在寻找At&t,我会搜索At&t,但如果你有噪音词At和a在那里,你将不会得到任何结果


另一种解决方案是检测他们何时请求特殊字符,并运行类似“%&Company%”的搜索而不是全文搜索,但这会影响查询的性能。

是否使用全文搜索?&和-是全文中的保留字符。至少在MSSQL@Jose查马:在mySQL中也是如此,至少是-。但有时它像com&company,然后,从tablename中选择*FROM,像“%company%”这样的公司并不好……我用我做的解决方法回答了这个问题。这是一个非常好的问题,我在网络上找不到任何真正让我信服的解决方案。如果你能够访问mysql本身,似乎可以更改单词字符:请参阅中的注释