MySQL - 使用UNHEX()函数与LIKE运算符

3

我正在尝试使用MySQL函数UNHEX()与LIKE操作符一起使用,但是我无法得到期望的结果,即$result_2_expected

我做错了什么?
我尝试了以下几种方法,但都没有成功:

  • LIKE UNHEX('%4272756365%')
  • LIKE '%UNHEX('4272756365')%'
  • LIKE '%UNHEX(4272756365)%'

等于操作符的经验(成功):

$name_1 = bin2hex("Bruce Wayne"); //4272756365205761796e65
$query_1 = "SELECT `NAME` FROM `USERS_TABLE` WHERE `NAME` = UNHEX('{$name_1}')"; // UNHEX('4272756365205761796e65')


$result_1 = [0][NAME] => "Bruce Wayne"; // Success

使用 LIKE 运算符的经验(失败):

$name_2 = bin2hex("Bruce"); // 4272756365
$query_2 = "SELECT `NAME` FROM `USERS_TABLE` WHERE `NAME` LIKE UNHEX('%{$name_2}%')"; // UNHEX('%4272756365%')

$result_2 = [] => null; // Fail

$result_2_expected = [0][NAME] => "Bruce Wayne"; [1][NAME] => "Bruce Willis"; [2][NAME] => "Bruce Springsteen"; // Expected as Success


3
用十六进制表示法替换百分号。 - Akina
运行良好。谢谢。 - Edgaras
1个回答

4
你的问题是在调用UNHEX时将通配符字符放入其中,而不是在外部连接它们,这会使UNHEX返回NULL,这将始终导致LIKE返回false。

更改为:

你的问题是将通配符字符放入了对UNHEX的调用中,而不是在其外部进行拼接。这将使UNHEX返回NULL,从而导致LIKE始终返回false。
LIKE UNHEX('%{$name_2}%')

to

LIKE  CONCAT('%', UNHEX('{$name_2}'), '%')

你的代码将按预期工作。或者,你可以像评论中@Akina建议的那样,在调用UNHEX时用它们的十六进制表示(25)替换%符号,并将你的代码替换为

LIKE UNHEX('25{$name_2}25')

适用于两种解决方案。谢谢。 - Edgaras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接