2013-07-30 40 views
0

我有一個記錄,其中firstname等於\。出於某種原因,它沒有給我留下記錄。當使用匹配語句使用轉義斜線時Mysql未返回結果

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 

回答

0

問題在於,默認情況下非常短的單詞沒有編入索引。 Here是文檔:

要被索引通過 所述的ft_min_word_len和ft_max_word_len系統自變量的定義字的

的最小和最大長度。 (請參見 第5.1.4節「服務器系統變量」。)默認最小值爲四個字符;默認最大值取決於版本。如果您更改了 這兩個值,則必須重建您的FULLTEXT索引。例如,如果 你希望一個3字符的單詞變爲可搜索,則可以通過以下行中的一個選項 文件中設置 的ft_min_word_len變量:

[mysqld] 
ft_min_word_len=3 

這也適用於布爾搜索以及自然語言。您需要更改選項以重建索引。

或者,你可以把一個regexp表達式firstname

OR firstname REGEXP('(\\*)') 
+0

當你說一個選項文件,你的意思是php.ini中? – jkushner

+0

@jkushner。 。 。不,這是MySQL的選項文件。你可以在這裏閱讀它:http://dev.mysql.com/doc/refman/5.6/en/option-files.html。 –

+0

如果我將它更改爲1,它會大大影響性能嗎? – jkushner

相關問題