Mysql在使用匹配语句使用转义斜杠时未返回结果


Mysql not returning result when using escaped slash using match statements

我有一条记录,其中firstname等于'。出于某种原因,它没有把唱片还给我。

SELECT 
    firstname,lastname,middlename,
    primary_emailaddress,alternate_emailaddress,personal_address_line1,
    personal_address_line2,personal_address_city,facebook_username,
    twitter_username,googleplus_username,linkedin_username,
    personal_website_url,birthday_month,notes,personal_address_zipcode,
    company_address_zipcode,home_phonenumber,company_phonenumber,
    cell_phonenumber,birthday_day,birthday_year,hash 
FROM contacts 
WHERE (
        MATCH( firstname,middlename,lastname,
            primary_emailaddress,alternate_emailaddress,personal_address_line1,
            personal_address_line2,personal_address_city,facebook_username,
            twitter_username,googleplus_username,linkedin_username,
            personal_website_url,birthday_month,notes ) AGAINST ('''*' IN BOOLEAN MODE) 
        OR personal_address_zipcode REGEXP('(''*)') 
        OR company_address_zipcode REGEXP('(''*)') 
        OR home_phonenumber REGEXP('(''*)') 
        OR company_phonenumber REGEXP('(''*)') 
        OR cell_phonenumber REGEXP('(''*)') 
        OR birthday_day REGEXP('(''*)') 
        OR birthday_year REGEXP('(''*)') 
    ) 
AND addressbook_id = 4

问题是,默认情况下,非常短的单词没有索引。这是文档:

要索引的单词的最小和最大长度由ft_min_word_len和ft_max_word_len系统变量。(参见第节5.1.4,"服务器系统变量"。)默认的最小值为四个字符;默认的最大值取决于版本。如果你改变无论是哪种值,都必须重新生成FULLTEXT索引。例如,如果如果要搜索三个字符的单词,可以设置ft_min_word_len变量,方法是在选项中放入以下行文件:

[mysqld]
ft_min_word_len=3

这适用于布尔搜索以及自然语言。您需要更改选项以重新生成索引。

或者,您可以为firstname:放入regexp表达式

    OR firstname REGEXP('(''*)')