mysql php搜索记录与特殊字符与like运算符

时间:2014-05-29 07:16:20

标签: php mysql special-characters

我已经使用了所有字母字符标题,用户可以点击该字符,并且可以从该字符开始获得结果,例如,如果我点击“A”,它将获得以所有“Albert”开头的记录

ALL A B c d e f g h i j k l m n o p q r s t u v w x y z Æ Å Ø Ö Ä 0-9 

mysql查询变为LIKE "a%"

但问题是它还会带来那些以特殊字符“Å”开头的记录,我不想要这些,只有在我点击并搜索它们时才会出现,就像使用这个LIKE "Å%"

怎么可能?

更新:我的db,表都是UTF-8排序规则。

2 个答案:

答案 0 :(得分:2)

您可以使用BINARY运算符根据其二进制表示形式搜索字符串(等等逐字节而不是逐个字符):

像这样(只需替换你的表信息)

SELECT * FROM `mytable` WHERE BINARY name LIKE 'A%'

以上是逐字节而不是逐字符搜索,这至少解决了我的类似问题。我用它来搜索国家的本地名称和类似的信息。

<强>更新

对于区分大小写和UTF-8的数据,您可以尝试这样做:

SELECT name FROM `mytable` WHERE name COLLATE utf8_bin LIKE 'a%';   // returned only lower a's latin
SELECT name FROM `mytable` WHERE name COLLATE utf8_bin LIKE 'ä%';   // returned only lower ä's

答案 1 :(得分:0)

你可以像这样使用

if(mysql_num_rows($query)==0){
SELECT name FROM `mytable` WHERE name COLLATE UTF8_GENERAL_CI LIKE '%a%'; 
SELECT name FROM `mytable` WHERE name COLLATE UTF8_GENERAL_CI LIKE '%ä%';
} 

%a%==它将搜索以

开头的所有内容

%%%==它将搜索所有以ä

开头的内容