使用国际字符时,我从mysql查询得到双重结果,即Å/Ä= A&Ö= O,

Law*_*nce 3 mysql utf-8

例如,如果我搜索名称Åsa我只想得到Åsa而不是Asa,与Björn相同而不是Bjorn

$query="select * from users where username like 'Björn'";
$result=mysql_query($query);
$num=mysql_num_rows($result);
echo"$num";
$i=0;
while($i<$num){     
$id=mysql_result($result,$i,"id");
$name=mysql_result($result,$i,"username");    
echo"<br/>$id,$name";
$i++;
}
Run Code Online (Sandbox Code Playgroud)

结果

34,Björn
67,Bjorn
Run Code Online (Sandbox Code Playgroud)

只有结果34应该显示
我正在使用

mysql_query("SET NAMES utf8");
mysql_query( "SET CHARACTER SET utf8");
Run Code Online (Sandbox Code Playgroud)

数据库,表和列设置为utf8_unicode_ci

Pek*_*ica 6

你的"问题"就是utf8_unicode_ci整理.该归类确实进行了"角色扩展",这意味着即使在=比较中,变音符号及其基本字符也被视为相同:

A = Ä
O = Ö
...
Run Code Online (Sandbox Code Playgroud)

这个mySQL手册页的第二个例子解释了这个问题:9.1.7.8.整理效果的例子

您需要做的是切换到区分变音符号和基本字符的排序规则(例如utf8_general_ci或者utf8_general_bin),或者仅在进行比较时切换到不同的排序规则:

select * from users where username like 'Björn' COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

这显然较慢,因为在查询期间必须为每条记录进行整理转换.