Mysql& PHP - 即使在“utf8_general_ci”排序规则下,查询也找不到带重音字符的关键字

时间:2015-01-30 12:26:51

标签: php mysql

我有一个包含歌曲名称的“utf8_general_ci”排序规则的数据库表,其中许多都是法语,包含重音字符,如“é”。

我已经实现了搜索这些歌曲的关键字,我的查询如下所示,其中“$ keywords”是用户在表单字段中提交的关键字:

SELECT DISTINCT song.id, song.title
FROM song       
WHERE 
(song.title LIKE '%".$keywords."%')

因此,对于名为“Tséveudire”的歌曲,如果我搜索“tseveudire”,则会在查询中找到该歌曲。但是,如果我搜索“tséveudire”,则找不到该歌曲。在这两种情况下,我希望搜索对重音和匹配不敏感。

在搜索数据库之前,我尝试将提交的关键字转换为PHP中的UTF-8,但它不起作用,关键字现在拼写为“téveudire”。

感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:2)

您需要设置正确的字符集。

mysql_set_charset('utf8');
mysqli_set_charset('utf8');

等。如果一切仍然失败,请尝试使用RLIKE而不是%%而不是LIKE

答案 1 :(得分:0)

尝试设置SET NAMES 'utf8',您需要在选择中指定字符的类型...您可以使用此功能

function connect_db()
{
$link = mysql_pconnect("host", "user", "pass");
    mysql_select_db("db", $link);

    $query = "SET NAMES 'utf8'";
    $result = mysql_query($query, $link);

    return $link;
}

$link=connect_db();
$keywords='tsèveudire';
$query="SELECT DISTINCT song.id, song.title
FROM song       
WHERE 
(song.title LIKE '%$keywords%')";

$result=mysql_query($query,$link);

$row=mysql_fetch_array($result);

echo $row['title'];