带有空格的字符串的MySQL不区分大小写的查询

时间:2015-05-08 12:38:55

标签: php mysql string

所以我试图做一个相当简单的任务,比较一个字符串和一个mysql表行/条目,例如。

SELECT * FROM table_name WHERE $string = table_column.

我的问题是,它是搜索并保持区分大小写。

The string: "A Long String"
The database entry "A Long String"

我的表被整理:latin1_swedish_ci应该在不区分大小写的情况下搜索(就像我的其他查询一样),我相信因为字符串包含空格可能是问题所在,它只是查看第一个字符的大写。

我在我的查询中尝试使用'Upper'和'lower'比较以及使用'LIKE'我也尝试使用REPLACE删除空格但我可能做错了,不完全确定。但它似乎永远不会找到正确的条目,除非我在数据库中输入它。

任何建议都会很酷!

$result = mysqli_query($db, "SELECT * FROM character_information WHERE 
(reference LIKE '".$origin_name."' AND char_name LIKE '".$char_name."') 
OR
(lower(reference) LIKE '".$origin_name."' AND lower(char_name) LIKE '".$char_name."') 
OR
(upper(reference) LIKE '".$origin_name."' AND upper(char_name) LIKE '".$char_name."') 
AND 
(char_gender = '".$char_gender."')");

另一次尝试?

$result = mysqli_query($db, "SELECT * FROM character_information WHERE 
reference = '".$origin_name."' AND char_name = '".$char_name."' AND char_gender = '".$char_gender."'");

我知道这个是完全错误的,不是以这种方式使用REPLACE假设,应该在UPDATE或INSERT中使用吗?无论如何,你可以通过删除所有内容的空白来看到我想要做的事情。

$origin_name = str_replace(' ', '', $origin_name);
$char_name = str_replace(' ', '', $char_name);

$result = mysqli_query($db, "SELECT * FROM character_information WHERE 
( (REPLACE(reference, ' ', '' )) LIKE '".$origin_name."' AND (REPLACE(char_name, ' ', '' )) LIKE '".$char_name."%') 
AND 
(char_gender = '".$char_gender."')");

2 个答案:

答案 0 :(得分:1)

不需要同时进行上下比较。如果您将数据库中的列和搜索项都转换为同一查询的一部分,那么您将确保不区分大小写。

mysqli_query($db, 'SELECT * FROM table_name WHERE LOWER(table_column) = LOWER(\'' . $value . '\')');

或者检查列是否包含值而不是等于它:

mysqli_query($db, 'SELECT * FROM table_name WHERE LOWER(table_column) LIKE LOWER(\'%' . $value . '%\')');

答案 1 :(得分:0)

我刚刚意识到我做错了什么,

它返回结果但是在我得到结果之后我在if语句中比较了它们,例如/ $ string == $ db_string(我不需要,我不会这样做)知道我为什么这样做了)它给了我“假”#39;因为PHP考虑了区分大小写的数据。

对不起伙计们!