【问题标题】:How to make a SELECT in PHP/MySQL case insensitive?如何使 PHP/MySQL 中的 SELECT 不区分大小写?
【发布时间】:2011-05-09 14:08:19
【问题描述】:

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

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

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

问题是,当我在寻找“测试”时,它说不存在,即使我的数据库中有“测试”。

【问题讨论】:

  • MySQL 的查询默认不区分大小写,除非基础表有区分大小写的排序规则集。

标签: php mysql


【解决方案1】:

你可以使用LIKE:

WHERE foo LIKE 'bar'

或者您可以将两个小写都转换为:

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

LOWER() 的示例最有效,因为您知道数据库中的所有数据都已经小写,然后您可以执行:

WHERE foo = LOWER("bar")

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

【讨论】:

  • 我确信在某些领域,某些信息必须为大写或混合大小写,不能全部为小写
【解决方案2】:

也可能是您的表格 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】:

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

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

【讨论】:

    【解决方案4】:

    尝试使用LIKE 而不是=

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

    【讨论】:

    • 这行得通?,他不应该在语句中使用Lower(),在PHP代码中使用strtolower()?
    • @Vash,这是一个问题还是一个陈述?
    • MySQL 在 LIKE 查询中通常不区分大小写,除非您竭尽全力使其不区分大小写。
    • @Vash:这不是 MySQL 引擎的工作方式,它是一个 SQL 的东西。检查这个问题:stackoverflow.com/questions/153944/is-sql-syntax-case-sensitive.
    【解决方案5】:

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

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

    当然你会消耗一点服务器的 cpu,但它比那些无聊的排序规则要简单得多。

    【讨论】:

    • "a little bit of the server's cpu" 如果表很大并且查询频繁运行,则可能意味着几个小时的 CPU。
    【解决方案6】:

    试试:

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

    【讨论】:

      【解决方案7】:

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

      像这样:

      SELECT * FROM table_name WHERE column_name LIKE BINARY 'search_string'

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

      【讨论】:

        猜你喜欢
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-08
        • 2013-09-22
        • 1970-01-01
        • 2011-04-13
        • 2014-07-19
        相关资源
        最近更新 更多