5

为用户构建我的搜索引擎以搜索三个变量 $Title、$Text 和 $Number...当用户搜索时,我如何找到所有结果,无论用户在 $query 中键入的大小写类型(小写还是大写) ?

$query = trim ($query);

$raw_results = mysql_query("SELECT * FROM posts
        WHERE (`Number` LIKE '%".$query."%') OR (`Title` LIKE '%".$query."%') OR (`Text` LIKE '%".$query."%') ") or die(mysql_error());
4

4 回答 4

5

使用不区分大小写的排序规则

SELECT * FROM posts
WHERE (`Number` LIKE '%".$query."%') 
OR (`Title` LIKE '%".$query."%') 
OR (`Text` LIKE '%".$query."%')
COLLATE utf8_ci  --'ci' stands for case insensitive: choose the colaltion that fits your encoding

支持的排序规则列表在这里:https ://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html

于 2013-03-03T18:49:37.603 回答
3

您可以使用 mysql LOWER()函数:

$query=strtolower($query); //Query to lower case
$raw_results = mysql_query("SELECT * FROM posts
    WHERE (LOWER(`Number`) LIKE '%".$query."%') OR (LOWER(`Title`) LIKE '%".$query."%') OR (LOWER(`Text`) LIKE '%".$query."%') ") or die(mysql_error());

但是,不推荐使用 php 中的 mysql 函数,您应该使用 mysqli 而不是 mysql。

于 2013-03-03T18:50:26.590 回答
1

char默认情况下,MySQL 对、varchartext(非二进制字符串)不区分大小写。

于 2013-03-03T18:49:24.467 回答
-1

我在自己的数据库中为一家公司做的一件事是使用 PHP 中的 strtoupper() 函数将所有内容都设为大写(特别是出于个人安全原因)。如果您在您希望不区分大小写的字段中使用 utf8_ci 排序规则,这也会有所帮助。

于 2013-03-03T18:58:08.533 回答