是否可以使以下查询字符串不区分大小写?
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。当我从命令行运行查询时,它可以工作,但是当我通过浏览器执行它时会抛出以下错误。
注意:查询失败:COLLATION'utf8_general_ci'对于
中的CHARACTER SET'latin1'无效
该表以UTF-8编码,其核对是utf8_general_ci。如何确保查询“小”匹配小,小或小?
答案 0 :(得分:1)
在将strtolower()
变量添加到您的查询之前,使用$term
或类似规范来规范化。{/ p>
答案 1 :(得分:0)
看起来好像第二个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条件导致了问题以及整理的设置。