为用户构建我的搜索引擎以搜索三个变量$ 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());
答案 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排序规则,那么它也会有所帮助。