例如,如果我搜索名称Å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
你的"问题"就是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)
这显然较慢,因为在查询期间必须为每条记录进行整理转换.