如何使PHP / MySQL中的SELECT不区分大小写?

时间:2011-05-09 14:08:19

标签: php mysql

她是我的问题,我猜它真的很基本。

我正在尝试在数据库中查找是否存在行。继承我的代码:

$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.';
}

问题是,当imm寻找“test”时,它表示不存在,即使我的数据库中有“Test”。

7 个答案:

答案 0 :(得分:11)

尝试使用LIKE代替=

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

答案 1 :(得分:9)

您可以使用LIKE

WHERE foo LIKE 'bar'

或者您可以使用以下两种方式转换小写:

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

LOWER()示例最有效的地方是,您知道数据库中的所有数据都已经过低级,然后您就可以执行:

WHERE foo = LOWER("bar")

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

答案 2 :(得分:4)

表格COLLATE设置

也可能存在问题

即使使用LIKE运算符,此CREATE语句也会强制您的选择查询区分大小写:

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

虽然这个会确保不区分大小写:

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

答案 3 :(得分:4)

你可以像其他人告诉你的那样使用“LIKE”解决它,重要的是要知道区分大小写是由数据库中的排序规则决定的。例如,如果您选择排序规则utf8_general_ci ...末尾的“ci”表示“不区分大小写”,因此您将来进行的比较将不区分大小写。

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

答案 4 :(得分:3)

如果您想要区分大小写选择,可以使用MD5()比较:

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

当然你消耗了一点服务器的cpu,但它比那些无聊的校对要简单得多。

答案 5 :(得分: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.';
}

答案 6 :(得分:0)

您可以在查询中使用LIKE BINARY。.

赞:

  

SELECT *从table_namecolumn_name的地方,例如BINARY'search_string'

这将检查区分大小写的“ search_string”数据