5

我一直在尝试使用此查询获取表行:

SELECT * FROM `table` WHERE `field` LIKE "%\u0435\u0442\u043e\u0442%"

字段本身:

Field                                     
--------------------------------------------------------------------
\u0435\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0430

虽然我似乎无法让它正常工作。我已经尝试过使用反斜杠字符:

LIKE "%\\u0435\\u0442\\u043e\\u0442%"
LIKE "%\\\\u0435\\\\u0442\\\\u043e\\\\u0442%"

但它们似乎都不起作用。

如果有人能提示我做错了什么,我将不胜感激。提前致谢!


编辑

问题解决了。解决方案:即使更正了查询的语法,它也没有返回任何结果。使字段 BINARY 后,查询开始工作。

4

2 回答 2

5

字符串比较函数中所述:

笔记

因为 MySQL 在字符串中使用 C 转义语法(例如,“<code>\n”来表示换行符),所以您必须将在LIKE字符串中使用的任何“<code>\”加倍。例如,要搜索“<code>\n”,请将其指定为“<code>\\n”。要搜索“<code>\”,请将其指定为“<code>\\\\”;这是因为反斜杠被解析器剥离一次,并且在进行模式匹配时再次剥离,留下一个反斜杠进行匹配。

所以:

SELECT * FROM `table` WHERE `field` LIKE '%\\\\u0435\\\\u0442\\\\u043e\\\\u0442%'

sqlfiddle上查看。

于 2012-12-02T16:25:08.857 回答
0

它对那些使用 PHP 的人很有用,它对我有用

$where[] = 'organizer_info LIKE(CONCAT("%", :organizer, "%"))';
$bind['organizer'] = str_replace('"', '', quotemeta(json_encode($orgNameString)));
于 2020-08-20T11:47:52.233 回答