Mysql 全文搜索中的撇号

Mysql 全文搜索中的撇号,mysql,database,full-text-search,apostrophe,Mysql,Database,Full Text Search,Apostrophe,当我在搜索页面中搜索雪铁龙时,我得到了结果,但如果我搜索blackn roll,我不会得到结果,因为它在表格中写得像black'n roll。一些用户可能也想搜索blackn roll,但没有得到结果。我怎样才能修好它?还有像v-hr这样的行和像“&/()”这样的特殊字符。我希望mysql忽略它们 $sql = "SELECT * FROM arac INNER JOIN suv_marka ON arac.marka = suv_marka.id WHERE

当我在搜索页面中搜索雪铁龙时,我得到了结果,但如果我搜索blackn roll,我不会得到结果,因为它在表格中写得像black'n roll。一些用户可能也想搜索blackn roll,但没有得到结果。我怎样才能修好它?还有像v-hr这样的行和像“&/()”这样的特殊字符。我希望mysql忽略它们

$sql = "SELECT * FROM arac 
        INNER JOIN suv_marka ON arac.marka = suv_marka.id 
        WHERE match(suv_marka.marka) against('citroen')";

如果您已经知道要替换的字符,那么可以使用MySQL的
REPLACE
函数将它们替换为
%
,并执行
类似的比较,例如:

create table test(value varchar(100));
insert into test values ('black''n roll');


SELECT value 
FROM test 
WHERE 'blackn roll' LIKE CONCAT('%', REPLACE(value, '''', '%'), '%');

如果需要替换多个字符,您可以用输入字符串替换“blackn roll”,并使用嵌套的
replace
函数。

反斜杠是MySQL的转义字符。您可以尝试以下操作…全文索引由于单词终止符而变得有点奇怪

$sql = "SELECT * FROM arac 
        INNER JOIN suv_marka ON arac.marka = suv_marka.id 
        WHERE match(suv_marka.marka) against ('black\'n roll' IN BOOLEAN MODE);"
如果这不起作用,那么试着逐个查找单词。单词长度也是一个因素,小词(默认情况下少于4个字符)不会被索引

$sql = "SELECT * FROM arac 
        INNER JOIN suv_marka ON arac.marka = suv_marka.id 
        WHERE match(suv_marka.marka) against ('black' + 'roll' IN BOOLEAN MODE);"

谢谢你的回答。它会同时返回两个结果吗?一些用户可能会搜索black'n roll,一些用户可能会搜索black'n roll。那么我能得到相同的结果吗?是的,它会在两种情况下返回结果。