例如,如果我搜索Å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++;
}
结果
34,Björn
67,Bjorn
只应显示结果34 我正在使用
mysql_query("SET NAMES utf8");
mysql_query( "SET CHARACTER SET utf8");
数据库,表和列设置为utf8_unicode_ci
答案 0 :(得分:6)
您的“问题”是utf8_unicode_ci
整理。该归类确实进行了“角色扩展”,这意味着即使在=
比较中,变音符号及其基本字符也被视为相同的:
A = Ä
O = Ö
...
此mySQL手册页上的第二个示例解释了该问题:9.1.7.8. Examples of the Effect of Collation
您需要做的是切换到区分变音符号和基本字符的排序规则(例如utf8_general_ci
或utf8_general_bin
),或者仅在进行比较时切换到不同的排序规则:
select * from users where username like 'Björn' COLLATE utf8_general_ci;
这显然较慢,因为在查询期间必须为每条记录进行整理转换。
答案 1 :(得分:1)
数据库,表和列设置为utf8_unicode_ci
这种整理故意使许多重音字符与其不重音的基础相匹配。通常这就是你想要的,有时却不是。如果不是,您必须选择最适合您正在使用的语言规则的排序规则。您可以搜索Here's some tables个MySQL排序规则以尝试找到合适的内容。
utf8_swedish_ci
是一种常用的可能性,它不会将A /Å/Ä和O /Ö整理在一起,但其他重音字符仍然整理在一起。不幸的是,我看不到很好的校对,知道各种欧洲重音字母,但仍然将它们视为不同。如果您根本不需要不区分大小写的匹配,则可以使用utf8_bin
。
答案 2 :(得分:-1)
当您的意思是LIKE
时,请不要使用=
查询。
$query="select * from users where username = 'Björn'";