MySQL - 不区分大小写的搜索

时间:2013-03-03 18:44:16

标签: php mysql search letters

为用户构建我的搜索引擎以搜索三个变量$ 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 个答案:

答案 0 :(得分:5)

使用不区分大小写的collation

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

答案 1 :(得分:2)

您可以使用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。

答案 2 :(得分:1)

默认情况下

MySQL is case-insensitive for char, varchar, and text(非二进制字符串)。

答案 3 :(得分:-1)

我在公司自己的数据库中做过的一件事就是用PHP中的strtoupper()函数做大写(特别是出于个人安全原因)。如果您在字段中使用utf8_ci排序规则,那么它也会有所帮助。