首页 >数据库 >mysql教程 >为什么 MySQL 的 LIKE 运算符在使用二进制字符串时区分大小写?

为什么 MySQL 的 LIKE 运算符在使用二进制字符串时区分大小写?

Barbara Streisand
Barbara Streisand原创
2024-11-07 19:00:03517浏览

Why is MySQL's LIKE Operator Case Sensitive When Using a Binary String?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn