Mysql 类SQL与=在没有通配符的情况下功能不同

Mysql 类SQL与=在没有通配符的情况下功能不同,mysql,sql-like,Mysql,Sql Like,我有一个查询,从like更改为=会导致匹配。我的理解是,除非存在通配符,否则=和like的功能是相同的。\uuu和%都不在我的字符串中。“我的字符串”中的字符包括: acdeijknoprtuy4@-. 我的问题是: SELECT * FROM UserEmails WHERE email like ? 返回0个结果,我将其更改为: SELECT * FROM UserEmails WHERE email = ? 我得到了返回的1个预期结果。这是在mysql 5.6.41的percona版

我有一个查询,从
like
更改为
=
会导致匹配。我的理解是,除非存在通配符,否则
=
like
的功能是相同的。
\uuu
%
都不在我的字符串中。“我的字符串”中的字符包括:

acdeijknoprtuy4@-.
我的问题是:

SELECT * FROM UserEmails WHERE email like ?
返回0个结果,我将其更改为:

SELECT * FROM UserEmails WHERE email = ?

我得到了返回的1个预期结果。这是在mysql 5.6.41的percona版本上运行的。

您的字符串或匹配的数据库值很可能有尾随空格

有关以下信息,请参阅文档:

所有MySQL排序规则都是PAD SPACE类型。这意味着所有字符, 比较VARCHAR和TEXT值时,不考虑任何尾随值 空间。本上下文中的“比较”不包括类似内容 模式匹配运算符,尾随空格对其非常重要

:

大多数MySQL排序规则都有pad属性pad SPACE。这个 例外情况是基于UCA 9.0.0及更高版本的Unicode排序规则 具有无焊盘的焊盘属性


‘p’!=’。直接从数据库检查,而不是从应用程序检查:
从用户电子邮件中选择电子邮件,其中电子邮件类似“%”
。如果仍然存在问题,请使用示例数据创建SQLFIDLE。