我有一个包含歌曲名称的“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”。
感谢您的时间和帮助。
答案 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'];