如何使用mySQL搜索转义的字符串?

时间:2018-07-19 17:51:52

标签: mysql sql

我遇到了最奇怪的问题:

我正在尝试使用此列作为数据格式的计数:

"{\"errors\":0,\"results\":{\"isError\":true,\"errorCode\":305,\"errorString\":\"Contact already exists: test@gmail.com\"}}"

这是一个带有转义字符的字符串。

我正在尝试在isError:true上进行搜索,但我没有做任何事情。

我尝试过

SELECT * FROM mytable WHERE col LIKE "%isError\":true%"

SELECT * FROM mytable WHERE col LIKE '%isError\":true%'

SELECT * FROM mytable WHERE col LIKE '%isError":true%'

SELECT * FROM mytable WHERE col LIKE '%isError\\":true%'

所有结果均为零。

如何搜索这个转义的字符串?

这是完整的数据。请记住,它存储为字符串。

"{\"errors\":0,\"results\":{\"isError\":true,\"errorCode\":305,\"errorString\":\"Contact already exists: test@gmail.com\"}}"

它的存储方式与TEXT类型列中的引号和所有内容完全相同。

(这是我正在使用的旧系统。)

3 个答案:

答案 0 :(得分:1)

您显示的数据样本看起来像JSON。 MySQL 5.7中有一些功能可以搜索JSON结构:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

没有理由在数据库中存储反斜杠。插入此数据时是否意外地两次转义了?

答案 1 :(得分:1)

我相信MySQL中的反斜杠也是一个转义符号,这是在查询中唯一需要转义的内容(如果使用单引号,则无论如何都应如此)。要转义反斜杠,只需重复一下:

select * from mytable where col like '%isError\\":true%'

Bill提出了一个很好的观点-从长远来看,最好以不同的方式存储JSON。

答案 2 :(得分:0)

我找到了答案。

要使用LIKE搜索字符串中的转义反斜杠,必须使用四个反斜杠。不直观,但确实如此。

How to search for slash (\) in MySQL? and why escaping (\) not required for where (=) but for Like is required?

感谢您的帮助。希望这对以后的人有所帮助。