2011-05-09 44 views
6

她是我的问题,我想它是非常基本的。如何使PHP/MySQL中的SELECT不区分大小写?

我想在数据库中查找是否存在行。继承人我的代码:

$req="SELECT * FROM INSTITUTS WHERE inst_name='$fc_inst'"; 
$result=mysql_query($req) or die ('Erreur :'.mysql_error()); 
if (mysql_num_rows($result)){ 
echo ' name exist'; 
} 
else { 
echo ' does not exist.'; 
} 

Probleme,当IMM找“测试”,它说并不存在,即使我有“测试”在我的数据库。

+2

默认情况下,MySQL的查询不区分大小写,除非基础表具有区分大小写的整理集。 – 2011-05-09 15:04:09

回答

9

您可以使用LIKE

WHERE foo LIKE 'bar' 

或者你可以施放小写:

WHERE LOWER(foo) = LOWER("bar") 

,你知道,数据库中的所有的数据都已经下套管与LOWER()的例子是最有效的,那么你可以执行:

WHERE foo = LOWER("bar") 

这将是比LIKE更便宜的比较如果你可以小写数据库中的所有数据。

+1

我相信在某些地区,一些信息**必须是**大写或混合大小写,并且不能全部小写 – Neal 2011-05-09 14:22:06

10

尝试使用LIKE代替=

$req="SELECT * FROM INSTITUTS WHERE `inst_name` LIKE '$fc_inst'"; 
+0

这会起作用吗?他不应该在PHP代码中使用Lower()和strtolower()? – 2011-05-09 14:13:25

+0

@Vash,这是一个问题或陈述? – Neal 2011-05-09 14:13:57

+0

这应该是问题。 – 2011-05-09 14:16:22

0

尝试:

$req="SELECT * FROM INSTITUTS WHERE UCASE(inst_name)=UCASE('$fc_inst')"; 
$result=mysql_query($req) or die ('Erreur :'.mysql_error()); 
if (mysql_num_rows($result)){ 
echo ' name exist'; 
} 
else { 
echo ' does not exist.'; 
} 
+0

谢谢大家。我很欣赏 – 2011-05-09 14:35:01

4

它也可能是您的表分页设定

的问题。此CREATE语句会迫使你选择的查询使用LIKE运算符时要区分大小写甚至:

CREATE 
    table instituts (inst_name VARCHAR(64)) 
    CHARACTER SET latin1 COLLATE latin1_general_cs; 

而这一次将确保案件-insensitivity:

CREATE 
    table instituts (inst_name VARCHAR(64)) 
    CHARACTER SET latin1 
+1

这可能是最明智的答案。 – 2011-05-10 10:53:10

3

您可以使用“喜欢”解决这个问题的其他人告诉你,它了解区分大小写由数据库中的排序规则确定非常重要。例如,如果您选择一个排序规则utf8_general_ci ...最后的“ci”表示“不区分大小写”,因此您将来进行的比较将不区分大小写。

简而言之:您必须小心您选择的排序规则。

3

可以使用MD5()比较,如果你想有一个区分大小写选择:

$req="SELECT * FROM INSTITUTS WHERE MD5(inst_name)=MD5('$fc_inst')"; 
当然

你消耗服务器CPU的一点点,但它的,而不是那些无聊的排序规则简单。

+0

*“服务器的cpu的一小部分”*可能表示CPU数小时,如果表很大并且查询频繁运行。 – 2011-08-13 21:25:09

+0

;-)当然是! – 2011-08-16 11:52:55

+0

好主意md5 ... grats和非常感谢 – KingRider 2015-05-13 14:48:42