MySQL 中 LIKE 的区分大小写
在 MySQL 中使用查询“SELECT concat_ws(title,description) as concatenated 执行 LIKE 搜索时连接 LIKE '%SearchTerm%';",可能会注意到搜索区分大小写,即使表是使用 utf8_general_ci 排序规则和 MyISAM 存储引擎进行编码的。
此行为的原因是当任一操作数是二进制字符串时,LIKE 运算符执行区分大小写的比较。在这种情况下,“连接”字段是一个二进制字符串,导致搜索区分大小写。
要解决此问题并使搜索不区分大小写,建议使用 BINARY 关键字和 LIKE运算符:
SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
这确保字符串比较是按二进制执行的,忽略任何大小写差异。
或者,COLLATE 关键字可以与 utf8_bin 排序规则一起使用来使搜索不区分大小写:
SELECT .... FROM .... WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
这两种方法都有效地修改了搜索行为,使其不区分大小写,同时保留 utf8_general_ci 排序规则的性能优势。
以上是为什么 MySQL 的 LIKE 运算符在使用二进制字符串时区分大小写?的详细内容。更多信息请关注PHP中文网其他相关文章!