我正在用php和mysql创建一个搜索引擎。
它有效但如果我搜索“publié”这个词,它就找不到任何东西,但如果我搜索“Publie”这个词,它会显示嵌入术语“publie”和“publié”的结果。
我如何才能使搜索重音敏感,只获得与我要求的完全匹配的结果,无论是否有重音?
以下是我使用的典型请求:
$requete4 = mysql_query("
SELECT
title,
description,
CONCAT(
IF (title LIKE '%".search_word."%', '1', '0'),
IF (description LIKE '%".$search_word."%', '1', '0-')
) AS match_bitmask
FROM mytable
WHERE
(
title LIKE '%".$search_word."%' OR
description LIKE '%".$search_word."%'
)
ORDER BY id DESC
");
注1:Mysql中的所有表,varchars和文本字段都是utf8_general_ci。
注意2:我尝试在请求结束时添加“COLLATE utf8_general_ci”,但收到错误消息。
感谢您的帮助。
答案 0 :(得分:3)
我如何才能使搜索重音敏感,只获得与我要求的完全匹配的结果,无论是否有重音?
使用utf8_bin
归类。任一 -
更改列的排序规则:
ALTER mytable
MODIFY title <datatype> COLLATE utf8_bin,
MOFIFY description <datatype> COLLATE utf8_bin;
显式指定要在每个LIKE
表达式中使用的排序规则:
SELECT
title,
description,
CONCAT(
IF (title LIKE '%".$search_word."%' COLLATE utf8_bin, '1', '0'),
IF (description LIKE '%".$search_word."%' COLLATE utf8_bin, '1', '0-')
) AS match_bitmask
FROM mytable
WHERE
(
title LIKE '%".$search_word."%' COLLATE utf8_bin OR
description LIKE '%".$search_word."%' COLLATE utf8_bin
)
ORDER BY id DESC