Php 使Mysql查询用例不敏感

Php 使Mysql查询用例不敏感,php,mysql,case-insensitive,Php,Mysql,Case Insensitive,是否可以使以下查询字符串不区分大小写 SELECT SUBSTR(raw,INSTR(raw,'".$term."') - 50,350) as term, (LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."',''))) /LENGTH('".$term."') AS occur,name,title FROM ( SELECT ( LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."','')) ) / L

是否可以使以下查询字符串不区分大小写

SELECT SUBSTR(raw,INSTR(raw,'".$term."') - 50,350) as term,
(LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."',''))) /LENGTH('".$term."') AS occur,name,title 
FROM ( 
     SELECT ( LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."','')) ) / LENGTH('".$term."') AS occur, raw, consol.name,title 
     FROM consol 
     WHERE LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."',''))>0 AND raw LIKE '%".$term."%' COLLATE utf8_general_ci ORDER BY occur DESC 
     ) t ";
表的引擎是MyISAM,编码是UTF8。当我从命令行运行查询时,它可以工作,但是当我通过浏览器执行它时,它抛出以下错误

注意:查询失败:排序规则“utf8\U general\U ci”对于中的字符集“latin1”无效


该表采用UTF-8编码,排序规则为utf8\u general\u ci。如何确保“small”查询匹配small、small或small?

在将
$term
变量添加到查询之前,使用
strtolower()
或类似方法对其进行规范化。

第二条select语句中的WHERE子句似乎是导致问题的原因。我改变了这一点:

WHERE LENGTH(raw) - LENGTH(REPLACE(raw,'".$term."',''))>0 AND raw LIKE '%".$term."%' COLLATE utf8_general_ci ORDER BY occur DESC
为此:

WHERE raw LIKE '%".$term."%' ORDER BY occur DESC

现在它似乎与所有结果都匹配。初始查询筛选器与第二个查询匹配。似乎是
LENGTH(raw)-LENGTH(REPLACE(raw,“$term.”,“)”)>0的WHERE条件以及排序规则的设置导致了问题。

表的编码/排序规则不一定等于任何给定列的编码/排序规则。检查您的列是否确实是utf8。该列的编码为UTF-8 Unicode(utf8),排序规则为utf8\u general\u ci。这似乎与长度和替换函数有关?可能吗?Malcolm,如果用户键入“Small”或“Small”或“Small”等,则表中的匹配项可以是“Small”或“Small”。它仍应返回结果。由于这是一个长文本字段,因此无法知道表中的数据是什么样子。