对于以JSON编码的字段使用MySQL LIKE运算符

时间:2012-12-02 16:18:06

标签: mysql json

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

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之后,查询开始工作。

2 个答案:

答案 0 :(得分:4)

正如String Comparison Functions所述:

  

注意

     

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

因此:

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

sqlfiddle上查看。

答案 1 :(得分:0)

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

$where[] = 'organizer_info LIKE(CONCAT("%", :organizer, "%"))';
$bind['organizer'] = str_replace('"', '', quotemeta(json_encode($orgNameString)));