首页 >数据库 >mysql教程 >为什么 MySQL LIKE 查询使用 utf8_general_ci 编码区分大小写?

为什么 MySQL LIKE 查询使用 utf8_general_ci 编码区分大小写?

Susan Sarandon
Susan Sarandon原创
2024-11-09 18:05:02461浏览

Why are MySQL LIKE Queries Case-Sensitive with utf8_general_ci Encoding?

MySQL LIKE 查询中的大小写敏感

问题:

考虑以下 MySQL 查询:

SELECT concat_ws(title, description) as concatenated
HAVING concatenated LIKE '%SearchTerm%';

尽管使用 LIKE 运算符,当 MyISAM 存储引擎的表编码为 utf8_general_ci 时,搜索似乎区分大小写。

说明:

MyISAM 存储引擎使用大小写-对存储在 utf8_general_ci 编码中的字符串进行不敏感的比较。但是,LIKE 运算符默认执行区分大小写的比较。

最佳解决方案:

要执行不区分大小写的比较,请使用 BINARY 关键字,如下所示:

SELECT ....
FROM ....
WHERE `concatenated` LIKE BINARY '%SearchTerm%';

当其中一个操作数是二进制时,字符串比较将区分大小写

替代解决方案:

或者,使用 COLLATE 语句指定特定于语言环境的排序规则:

SELECT ....
FROM ....
WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;

此方法允许不区分大小写的比较,同时保持原始字符编码。

以上是为什么 MySQL LIKE 查询使用 utf8_general_ci 编码区分大小写?的详细内容。更多信息请关注PHP中文网其他相关文章!

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