首页  >  文章  >  数据库  >  为什么我的 MySQL LIKE 运算符区分大小写,即使我的表使用 utf8_general_ci?

为什么我的 MySQL LIKE 运算符区分大小写,即使我的表使用 utf8_general_ci?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-08 19:30:02482浏览

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

了解 MySQL 中的区分大小写

使用 LIKE 运算符的 MySQL 查询似乎表现出区分大小写,尽管您的表被编码为 utf8_general_ci具有MyISAM存储引擎。这种行为可能令人费解,了解根本原因对于解决问题至关重要。

二进制与非二进制字符串比较:

理解这一点的关键行为在于二进制和非二进制字符串比较之间的区别。默认情况下,MySQL 执行非二进制字符串比较,这对于大多数字符集都区分大小写,包括 utf8_general_ci。

通过二进制比较修复区分大小写:

要解决区分大小写问题,您可以修改查询以使用二进制字符串比较。这是通过在 LIKE 运算符的右侧操作数前添加 BINARY 关键字来实现的。更正后的查询如下所示:

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

此修改强制 MySQL 使用不区分大小写的二进制字符串比较。

使用 COLLATE 的替代解决方案:

实现不区分大小写的字符串比较的另一种方法是使用 COLLATE 子句。 COLLATE 子句指定要应用于字符串比较的字符集和排序规则。通过指定 utf8_bin 排序规则,您可以强制 MySQL 使用二进制字符串比较。使用 COLLATE 的查询将是:

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

以上是为什么我的 MySQL LIKE 运算符区分大小写,即使我的表使用 utf8_general_ci?的详细内容。更多信息请关注PHP中文网其他相关文章!

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